使用JSONP

使用JSONP

两台服务器数据同步的时候,JSONP是一个很好的解决方案。
今天是第一次使用,虽然之前有了解过。

服务器A:
getData.js

//‘jsonCall’是回调函数,需要定义在在‘外部’,之前定义在(function(){})()内部,失败了。
function jsonCall(res) {
    if(res['status']=='ok') {
        alert('绑定成功!');
        easyDialog.close();
    }
}
(function(){
    $("button#btn_login").on('click', function(){
        var a = $("#loginName").val(),
            p = $("#loginPwd").val();
        var data = {
            action:"login",
            password:hex_md5(p),
            callback:'jsonCall',
            account:a,
            return_url : $("input[name='return_url']").val(),
            fxid : $("input[name='fxid']").val()
        };
       //使用jQuery的getJSON函数,访问的文件名最后需要加上“callback=?”,这样jQuery会
       //将这个请求当作JSONP的请求。否则失败。
       $.getJSON('http://www.aa.cc/m/jh/jh.php?callback=?', data);
    });
})();

服务器B:
callback.php

<?php
include '../../common/autoload.php';
use \Member\MemberAccount;
$action = trim($_REQUEST['action']);
$mem = new MemberAccount($GLOBALS['le']);
if($action=='login') {
    $account  = $_REQUEST['account'];
    $pwd      = $_REQUEST['password'];
    if(!is_numeric($account)) {
        exit ('{"status":"fail", "msg":"登录账号格式错误"}');
    }
    $res = $mem->Login($account, $pwd);
    if($res['status']=='ok') {
        $callBack = $_REQUEST['callback'];
        echo $callBack.'({"status":"ok"})';
    }
2014-10-19 14:44178