JSONP请求错误处理

我正在发出ajax jsonp请求,但是失败错误处理无法正常工作。如果请求为404或500,则不会处理该错误。


我一直在四处寻找答案,但找不到任何东西。http://code.google.com/p/jquery-jsonp/似乎有一种解决方案,但是我找不到有关如何使用它的任何示例。


function authenticate(user, pass) {       

    $.ajax ({

        type: "POST",

        url: "url",

        dataType: 'jsonp',

        async: false,

        //json object to sent to the authentication url

        data: {"u": userid, "p": pass},


        success: function (data) {

            //successful authentication here

            console.log(data);

        },

        error: function(XHR, textStatus, errorThrown) {

            alert("error: " + textStatus);

            alert("error: " + errorThrown);

        }

    })

}


千万里不及你
浏览 676回答 3
3回答

一只斗牛犬

如果查看jQuery.ajax()文档,则可以找到:错误如果请求失败,将调用的函数(...)注意:对于跨域脚本和跨域JSONP请求,不会调用此处理程序。这是一个Ajax事件。因此,您不得不寻找解决方法。您可以指定超时以触发错误回调。这意味着应在指定的时间范围内成功完成请求。否则,假设它已失败:$.ajax({    ...    timeout: 5000, // a lot of time for the request to be successfully completed    ...    error: function(x, t, m) {        if(t==="timeout") {            // something went wrong (handle it)        }    }});您代码中的其他问题...尽管JSONP(可在此处和此处查看)可用来克服原始策略的限制,但您不能使用JSONP POST(请参阅CORS),因为那样行不通 -它创建了一个元素来获取数据,必须通过GET请求完成。JSONP解决方案不使用XmlHttpRequest对象,因此按照标准的理解方式,它不是AJAX请求,但是内容仍然可以动态访问-对最终用户而言没有区别。$.ajax({    url: url,    type: "GET"    dataType: "jsonp",    ...其次,您提供的数据不正确。您正在将javascript对象(使用对象文字创建的)推送到网络上,而不是其序列化的JSON表示形式。创建JSON字符串(不手动,例如使用JSON.stringify转换器):$.ajax({    ...    data: JSON.stringify({u: userid, p: pass}),    ...上一期,您已将设置async为false,而文档则显示:跨域请求和dataType:“ jsonp”请求不支持同步操作。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JQuery