【问题标题】:JavaScript ajax, JSONP, Callback function to do something with dataJavaScript ajax、JSONP、回调函数对数据做一些事情
【发布时间】:2015-11-02 19:46:16
【问题描述】:

伙计们,

我正在尝试进行 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 更新了代码。它不会进入“成功”块。它出现以下错误。

当我看提琴手时。 JSON就在那里。我如何获得它?

【问题讨论】:

  • “我可以看到调用执行并返回 JSON”——这是个问题,你需要它返回 JSONP。
  • 您没有正确使用 JSONP。 jsonpCallback 需要一个函数,该函数应返回一个字符串,该字符串将用于回调名称或字符串回调名称。你的函数什么都不返回,所以......谁知道它会做什么。

标签: javascript jquery json ajax jsonp


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

旁白:

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

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

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

不要覆盖 jQuery 对浏览器对 CORS 支持的检测。你不能通过欺骗 jQuery 让古老的浏览器支持 CORS。无论如何你都在使用 JSONP,所以 CORS 是无关紧要的。


以上是明智、标准、稳健的解决方案。

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

【讨论】:

  • 我根据您的建议更新了我的代码。他们似乎工作,但我仍然不明白我如何使用这个回调函数。
  • 你需要让服务器返回 JSONP,而不是 JSON。它需要是一个 JavaScript 程序,它使用一个参数(您的数据)调用查询字符串的callback 中指定的函数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-06-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-17
  • 2012-09-12
  • 2019-12-07
相关资源
最近更新 更多