gpt4 book ai didi

JavaScript ajax、JSONP、回调函数来处理数据

转载 作者:行者123 更新时间:2023-11-30 16:29:52 25 4
gpt4 key购买 nike

伙计们,

我正在尝试进行 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');
}

当我运行它时,它会工作,它会显示一个消息框,上面写着“正在处理数据,即”,但那又怎样。我该如何处理结果?

更新:

所以我已经根据 Quentin 更新了代码。它不会进入“成功” block 。错误如下。

enter image description here

当我看着 fiddler 时。 JSON 在那里。我如何获得它?

enter image description here

最佳答案

  1. 不要强求函数名称。这是竞争条件的秘诀。删除 jsonpCallback: processDataIE。让 jQuery 确定函数名称。
  2. 不要从 URL 中删除回调参数。让服务器从查询字符串中读取 callback 以确定调用哪个函数。删除 jsonp: false,
  3. 正常使用success 函数。 (摆脱 processDataIE,这就是 success 的目的)。

旁白:

crossDomain: true 毫无意义。它告诉 jQuery,当它使用 XHR(你不是)并且 URL 指向相同的来源(它不是)时,它不应该添加额外的 header ,以防服务器将 HTTP 重定向到不同的产地。

async: true 毫无意义。这是默认设置,无论如何 JSONP 请求只能是异步的。

$.support.cors = true; 充其量是毫无意义的,而且可能有害。将其删除。

不要覆盖 jQuery 对浏览器对 CORS 支持的检测。你不能通过对 jQuery 说谎来让古老的浏览器支持 CORS。无论如何,您都在使用 JSONP,因此 CORS 无关紧要。


以上是合理、标准、稳健的解决方案。

如果您想要快速破解以维护您在游戏中的所有不良做法,那么只需查看 processDataIE 的第一个参数。

关于JavaScript ajax、JSONP、回调函数来处理数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33485619/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com