为了账号安全,请及时绑定邮箱和手机立即绑定

JSONP请求错误处理

JSONP请求错误处理

Helenr 2019-12-13 15:10:47
我正在发出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);        }    })}
查看完整描述

3 回答

?
尚方宝剑之说

TA贡献1788条经验 获得超4个赞

如果查看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”请求不支持同步操作。



查看完整回答
反对 回复 2019-12-14
  • 3 回答
  • 0 关注
  • 435 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信