jQuery Ajax发送空的转义数据

时间:2015-10-29 23:00:44

标签: php jquery ajax

我正在开发一个可以连接到网站API的移动应用程序。 我通过jQuery Ajax发送数据,但是在将数据转换为URL友好时,我的GET参数在到达API时变为空。

我有以下jQuery / javascript代码

var id = 012345;
var token = 55fggt98ujhsbnh;
var email = "sample@example.com";
var json = { // Create object
    "task" : "request",
    "id" : id, 
    "token" : token
};
var jsonfull = []; // Push to jsonfull.
jsonfull.push(json);
var url = JSON.stringify(json);
var crypt = '&hash='+CryptoJS.SHA512(token+task+email+url).toString(CryptoJS.enc.Hex)+'&callback=?';
var x = 'json='+escape(url)+escape(crypt);
$.ajax({
    url: "mydemosite.com/?p=app&", 
    crossDomain: true,
    data: x,
    dataType: "jsonp"           
})
.done(function (json){ 
    alert(json.response);
});

在我发送数据的PHP代码中,我有以下代码来接收ajax数据

$rest = $_GET['json'];
$api = json_decode($rest,true);
$type = 'json';
file_put_contents('logs/api_task.txt', print_r($_GET,true));

检查保存内容的文件我得到了

Array
(
    [p] => app
    [callback] => jQuery1111006607784540392458_1446159115404
    [json] => {"task":"balance","merchant":"hifee","token":"1446159118-5632a30e2ed0f5632a30e2ed465614257"}&hash=0b645fac1f3ef3b5911435e58fbc1f157bd0273a01a664427b014fb517d9c46ae60e1d2fe3128d76d610706f9b8a9ac660517b77cbf4c3c6e02e597b065d1038&callback=?
    [_] => 1446159115406
)

数据我希望得到的是

Array
(
    [p] => app
    [callback] => jQuery1111006607784540392458_1446159115404
    [json] => {"task":"balance","merchant":"hifee","token":"1446159118-5632a30e2ed0f5632a30e2ed465614257"}
    [hash] => 0b645fac1f3ef3b5911435e58fbc1f157bd0273a01a664427b014fb517d9c46ae60e1d2fe3128d76d610706f9b8a9ac660517b77cbf4c3c6e02e597b065d1038
)

我很感激能得到的任何帮助。

1 个答案:

答案 0 :(得分:1)

因为您正在转义crypt变量并将其连接到JSON参数值。使用escape,您还转发了&,所有内容都成为json参数的一部分。

如果您只是将参数作为对象传递并让jQuery转义值,那会更简单。

$.ajax({
    url: "mydemosite.com", 
    crossDomain: true,
    data: {
        p: "app",
        json: url,
        hash: CryptoJS.SHA512(token+task+email+url).toString(CryptoJS.enc.Hex)
    },
    dataType: "jsonp"           
})
.done(function (json){ 
    alert(json.response);
});