使用jquery ajax将数据作为json发送到php脚本时的解析器错误

时间:2014-10-12 09:27:25

标签: javascript php jquery ajax json

我正在localhost使用jquery的$.ajax向我的服务器发送一些数据。

数据为JSON对象。

如下:

的javascript

var jso={
    "data": {
        "Game_name": "Road Rash",
        "cheat": "xyzzyspoon!",
        "effects": [
            {
                "nitro": true
            },
            {
                "chain": false
            }
        ]
    }
};
function sendData(){
var queryString=JSON.stringify(jso);
$.ajax({
    type: "POST",
    url: "/gamers_cheats.php",
    contentType: "application/json; charset=utf-8",
    traditional: true,
    dataType: 'json',
    data: queryString,
    success: function(data){
        console.log(data);
    },
    error: function(data,textStatus,jqXHR){
    alert("Unknown Error occured :- \n "+textStatus+"\n error");
    console.log("Unknown Error occured :- \n "+textStatus+"\n error");
    }
});
}
sendData();

并将php文件中的数据处理为:

gamers_cheats.php:

<?php
var_dump($_POST);
echo"\n Count:- ".count($_POST);
// This is Just a demo file
?>

但问题是$.ajax警告error:部分textStatus作为parsererror。即使我没有使用JSON.stringify,也会发生同样的情况。

如果行:

    contentType: "application/json; charset=utf-8",
    traditional: true,
    dataType: 'json',

被删除然后请求被发送到服务器但是这不是有效请求,因为它向\对象中的每个(")添加了额外的斜杠(JSON)。

像:

\"data\": {
        \"Game_name\": \"Road Rash\",
        \"cheat\": \"xyzzyspoon!\",
        \"effects\": [
            {
                \"nitro\": true
            },
            {
                \"chain\": false
            }
        ]
    }

因此在服务器端处理时会出错。有没有办法使用jquery ajax正确发送POST JSON数据并在服务器上正确处理它?

还有一个问题,我可以将$_POST格式的额外JSON参数添加到queryString data: queryString +"&&navigator="+navigator.userAgent+""作为{{1}}吗?但这也不起作用(虽然这并不重要,但对它很好奇)。

仅供参考我使用php 5.2运行IIS 7服务器,使用JSON2.js运行JQuery 1.7.2版。

希望这里的专家会帮助我。

1 个答案:

答案 0 :(得分:0)

删除行&#39; var queryString = JSON.stringify(jso);&#39;并传递对象jso作为数据可能会有所帮助。试一次。