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确定函数名
  • 不要从URL中删除回调参数。让服务器从查询字符串中读取
    回调
    ,以确定调用哪个函数。删除
    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程序,用一个参数(您的数据)调用查询字符串的
    回调中指定的函数。