Adr*_*ica 38 ajax error-handling jquery json 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);
}
})
}
Run Code Online (Sandbox Code Playgroud)
jwa*_*zko 53
如果查看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)
}
}
});
Run Code Online (Sandbox Code Playgroud)
您的代码中的其他问题......
虽然JSONP(在此处和此处查看)可用于克服原始策略限制,但您无法使用JSONP进行POST(请参阅CORS),因为它不会以这种方式工作 - 它会创建一个元素来获取数据,这必须是通过GET请求完成.JSONP解决方案不使用XmlHttpRequest对象,因此它不是标准理解方式的AJAX请求,但内容仍然是动态访问的 - 对最终用户没有区别.
$.ajax({
url: url,
type: "GET"
dataType: "jsonp",
...
Run Code Online (Sandbox Code Playgroud)
其次,您提供的数据不正确.您正在将javascript对象(使用对象文字创建)推送到线路而不是其序列化的JSON表示.创建JSON字符串(不是手动,使用例如JSON.stringify转换器):
$.ajax({
...
data: JSON.stringify({u: userid, p: pass}),
...
Run Code Online (Sandbox Code Playgroud)
最后一个问题,您已设置async为false,而文档说:
跨域请求和dataType:"jsonp"请求不支持同步操作.
shy*_*mtp 36
两种处理错误的方法,
跨域JSONP请求没有错误处理.使用Github 上提供的jsonp插件 https://github.com/jaubourg/jquery-jsonp,它提供错误处理支持.
jQuery ajax Timeout - 在一段合理的时间后触发错误回调的超时,因为它可能无声地失败.您可能不知道实际错误(或错误状态)是什么,但至少您可以处理错误
小智 10
我一直在努力尝试处理ajax jsonp DataType请求上的错误,但是我想分享你的代码,希望它有所帮助.一个基本的事情是在ajax请求中包含超时,否则它将永远不会输入错误:function
$.ajax({
url: "google.com/api/doesnotexists",
dataType: "jsonp",
timeout: 5000,
success: function (parsed_json) {
console.log(parsed_json);
},
error: function (parsedjson, textStatus, errorThrown) {
console.log("parsedJson: " + JSON.stringify(parsedjson));
$('body').append(
"parsedJson status: " + parsedjson.status + '</br>' +
"errorStatus: " + textStatus + '</br>' +
"errorThrown: " + errorThrown);
}
});
Run Code Online (Sandbox Code Playgroud)
jsfiddle - 使用jquery ajax调用和JSONP dataType处理错误 - 错误404
| 归档时间: |
|
| 查看次数: |
49066 次 |
| 最近记录: |