JavaScript ajax、JSONP、回调函数来处理数据
伙计们JavaScript ajax、JSONP、回调函数来处理数据,javascript,jquery,json,ajax,jsonp,Javascript,Jquery,Json,Ajax,Jsonp,伙计们 我正在尝试通过ajax调用获取一些JSON。我可以很容易地在Chrome中绕过跨源问题,但在IE中,我让它工作而不抛出错误的唯一方法是使用JSONP。我的问题是我不知道如何处理回复。我可以看到调用在fiddler中执行并返回JSON,但如何在下面的代码中捕获并使用它呢 $.support.cors = true; function callAjaxIE(){ $.ajax({
我正在尝试通过ajax调用获取一些JSON。我可以很容易地在Chrome中绕过跨源问题,但在IE中,我让它工作而不抛出错误的唯一方法是使用JSONP。我的问题是我不知道如何处理回复。我可以看到调用在fiddler中执行并返回JSON,但如何在下面的代码中捕获并使用它呢
$.support.cors = true;
function callAjaxIE(){
$.ajax({
type: 'GET',
async: true,
url: usageUrl,
dataType: 'jsonp',
crossDomain: true,
jsonp: false,
jsonpCallback: processDataIE,
// cache: false,
success: function (data) {
alert('success');
//processData(data)
},
error: function (e){
console.log(e);
}
}).done(function (data) {
alert('done');
});
function processDataIE(){
alert('processing data ie');
}
当我运行它时,它会工作,它会显示一个消息框,上面写着“正在处理数据ie”,但又怎么样呢。我如何处理结果
更新:
所以我按照昆汀的说法更新了代码。它不属于“成功”的范畴。它错误如下
当我看着小提琴手。JSON就在那里。我怎么得到它
jsonpCallback:processDataIE
。让jQuery确定函数名回调
,以确定调用哪个函数。删除jsonp:false,
success
功能。(摆脱processDataIE
,这就是success
的目的)crossDomain:true
是没有意义的。它告诉jQuery,当它使用XHR(您没有)并且URL指向同一个源(它没有)时,它不应该添加额外的头,以防服务器将HTTP重定向到另一个源
async:true
是没有意义的。这是默认设置,而且JSONP请求不能是非异步的
$.support.cors=true代码>充其量是毫无意义的,可能是有害的。移除它
不要通过浏览器覆盖jQuery对CORS支持的检测。你不能通过欺骗jQuery来让古老的浏览器支持CORS。无论如何,您都在使用JSONP,所以CORS是不相关的
以上是明智、标准、稳健的解决方案
如果您想要快速破解来维持所有糟糕的实践,那么只需查看processDataIE
的第一个参数“我可以看到调用执行并返回JSON”-这是一个问题,您需要它来返回JSONP。您没有正确使用JSONP。jsonpCallback需要一个函数,该函数应返回将用于回调名称的字符串或字符串回调名称。您的函数不返回任何内容,因此。。。谁知道我会做什么。我用你的建议更新了我的代码。它们似乎可以工作,但我仍然不明白如何使用这个回调函数。您需要让服务器返回JSONP,而不是JSON。它需要是一个JavaScript程序,用一个参数(您的数据)调用查询字符串的回调中指定的函数。