JSONP警报parsererror

时间:2013-03-23 23:57:32

标签: javascript jquery json

$.ajax({
    type:           "GET",
    dataType:       "jsonp",
    jsonpCallback:  "jsoncallback",
    //async: false ,
    data: 
    {
        // some data here

    },
    url: "http://mydomain.com/checkRequest.php",
    success: function(data){

    alert("123");

            alert(data.data.NameA);

    },
    error: function(jqXHR, textStatus){
    alert("Request failed: " + textStatus);
    }
});// end of ajax

我可以从下面的网址

获取以下字符串
([{
        "data": {
            "Rate": "",
            "RoleA": "Student",
            "NameA": "studentD",
            "RoleB": "Tutor",
            "NameB": "tutorB",
            "Give": "0",
            "Get": "1",
            "Accept": "0",
            "RateCounter": ""
        }
    }
]);

http://mydomain.com/checkRequest.php?callback=jsoncallback&nameB=tutorB&roleB=Tutor&get=1&roleA=Student&nameA=studentD&give=0&_=1364082750444

然而,它会提醒parsererror。请问哪里出了问题?

如果我删除jsonpCallback: "jsoncallback",并将URL更改为网址:"http://mydomain.com/checkRequest.php?jsoncallback=?",,则没有parsererror,但它无法alert(data.data.NameA);

1 个答案:

答案 0 :(得分:2)

您可能需要jsonp选项而不是jsonpCallback

$.ajax({
    type:           "GET",
    dataType:       "jsonp",
    jsonp:          "jsoncallback",
    // ...
});

jsonp设置参数的 名称 ,并与您的其他示例匹配:

url: "http://mydomain.com/checkRequest.php?jsoncallback=?",

使用jsonpCallback,您需要设置 ,从而生成包含callback=jsoncallback的网址。服务器似乎不期望这样,并且在没有函数名的情况下最终响应:

([{...}]);

VS。类似的东西:

jQuery191_etc([{...}]);

来自docs

  

<强> JSONP

     

覆盖jsonp请求中的回调函数名称。这个值   将在'callback =?'中使用而不是'callback'的一部分   在url中查询字符串。因此{jsonp:'onJSONPLoad'}会导致   'onJSONPLoad=?'传递给服务器。 [...]

  

<强> jsonpCallback

     

指定JSONP请求的回调函数名称。这个值   将用于代替自动生成的随机名称   jQuery的。 [...]