$.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更改为url:"http://mydomain.com/checkRequest.php?jsoncallback=?",,则没有parsererror,但它无法alert(data.data.NameA);

最佳答案

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

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


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

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


使用jsonpCallback,您将改为设置值,从而导致包含callback=jsoncallback的URL。服务器似乎不期望这样,并且最终在没有函数名的情况下响应:

([{...}]);


与类似的东西:

jQuery191_etc([{...}]);




docs


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





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

10-07 23:32