1
$.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

我可以从下面的 URL 中获取以下字符串,

([{
        "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为 url:"http://mydomain.com/checkRequest.php?jsoncallback=?",没有解析器错误,但它不能alert(data.data.NameA);

4

1 回答 1

2

您可能想要该jsonp选项而不是jsonpCallback

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

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

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

使用jsonpCallback,您将改为设置value,从而生成一个包含callback=jsoncallback. 服务器似乎没有预料到这一点,并最终在没有函数名称的情况下响应:

([{...}]);

与类似的东西:

jQuery191_etc([{...}]);

文档

jsonp

覆盖 jsonp 请求中的回调函数名称。在“callback=?”中将使用该值代替“callback” url 中查询字符串的一部分。所以{jsonp:'onJSONPLoad'}会导致 'onJSONPLoad=?'传递给服务器。[...]

jsonp回调

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

于 2013-03-24T00:06:28.700 回答