使用jQuery $ .ajax无效的JSONP响应/回调

时间:2012-05-23 11:59:38

标签: javascript jquery ajax jsonp

我无法使用$.ajax捕获C#对jQuery的响应。我收到错误"SCRIPT ERROR"。如何使用JSONP捕获响应?这就是我正在使用的:

$.ajax({
    async: true,
    context: mrq,
    cache: false,
    type: "GET",
    url: MYURL,
    crossDomain: true,
    dataType: 'jsonp',
    data: MYDATA,
    processData: false,
    jsonp: "jsonREQ",
    jsonpCallback: "onJSONPsuccess",
    success: function (jsonText, textStatus) {}
});

2 个答案:

答案 0 :(得分:0)

据我了解,dataType: 'jsonp'表示一旦返回它就会将其作为参数放入回调函数中。所以,我试试这个:

onJSONPsuccess = function(response) {
  // do something with response, e.g.
  results = response["results"]
}

$.ajax({
  crossDomain: true,
  dataType: 'jsonp',
  data: { /*params you're sending in*/ },
  jsonp: "jsonREQ",
  jsonpCallback: "onJSONPsuccess",
  success: onJSONPsuccess
});

答案 1 :(得分:0)

你说服务器端是C# - 你在使用WCF吗?这里有一篇很棒的文章: http://bendewey.wordpress.com/2009/11/24/using-jsonp-with-wcf-and-jquery/

基本上你需要设置WCF(或你正在使用的任何服务器端代码)来返回包含在回调函数调用中的json。

但是,使用jquery,你可以简单地添加“?Callback =?”到你的URL,将dataType更改为'jsonp',并忘记其余的东西。您不需要设置jsonp或jsonpCallback选项。

与json请求相反,jsonp请求将返回包含在'd'属性中的 not 数据,因此您的回调函数为:

function(data) { var a = data.myProperty ... }

而不是

function(data) { var a = data.d.myProperty ... }

整个方法是:

var url = configuration.serviceUrl + "/" + method + "?callback=?";

var options = {
    type: 'GET',
    url: url,
    data: args,
    dataType: "jsonp",
    contentType: "application/json",
    success: function(data) {
        if (callback != null) callback(data);
    }
};

if (typeof errorCallback != 'undefined')
    options.error = errorCallback;

$.ajax(options);