如何处理getJSON调用中的错误?我试图使用jsonp引用跨域脚本服务,您如何注册错误方法?getJSON调用中的错误处理
回答
似乎没有错误的方法从我读的here。 This answer提供了一个很好的解释
$.getJSON()
是一种常规的AJAX调用的抽象,你必须告诉你,你想要一个JSON编码的响应。
$.ajax({
url: url,
dataType: 'json',
data: data,
success: callback
});
您可以通过两种方式来处理错误:一般(通过配置AJAX调用之前实际美其名曰)(与方法链)或明确。
'通用' 会是这样的:
$.ajaxSetup({
"error":function() { alert("error"); }
});
和 '特殊' 的方式:
$.getJSON("example.json", function() {
alert("success");
})
.success(function() { alert("second success"); })
.error(function() { alert("error"); })
.complete(function() { alert("complete"); });
? – 2011-06-09 20:00:54
不好意思!你可以像你那样去。看看文档的更详细的帮助:[http://api.jquery.com/jQuery.ajax](http://api.jquery.com/jQuery.ajax) – 2011-06-15 12:36:43
请注意,这需要jQuery 1.5+(试图让它工作瓦特/ jQuery 1.3,并想知道为什么它抱怨无效的方法:-) – kenyee 2011-12-13 22:01:19
有人给卢西亚诺这些点:) 我只是测试他的回答-had类似问题和完美...
我甚至加我的50美分:
.error(function(jqXHR, textStatus, errorThrown) {
console.log("error " + textStatus);
console.log("incoming Text " + jqXHR.responseText);
})
这是与跨网站JSONP还是与网站JSON相同? – hippietrail 2011-12-18 16:02:40
好的答案!只需要注意.error:它会在jQuery 1.8中弃用,所以请使用[.fail](http://api.jquery.com/jQuery.ajax/) – 2012-07-03 06:41:29
这节省了我的生命 – KJP 2013-05-08 18:00:27
我遇到了同样的问题,但不是为失败的请求创建回调,而是简单地使用json数据对象返回错误。
如果可能,这似乎是最简单的解决方案。以下是我使用的Python代码示例。 (使用Flask,Flask的jsonify f和SQLAlchemy)
try:
snip = Snip.query.filter_by(user_id=current_user.get_id(), id=snip_id).first()
db.session.delete(snip)
db.session.commit()
return jsonify(success=True)
except Exception, e:
logging.debug(e)
return jsonify(error="Sorry, we couldn't delete that clip.")
然后你可以像这样检查Javascript;
$.getJSON('/ajax/deleteSnip/' + data_id,
function(data){
console.log(data);
if (data.success === true) {
console.log("successfully deleted snip");
$('.snippet[data-id="' + data_id + '"]').slideUp();
}
else {
//only shows if the data object was returned
}
});
这对于发生在服务器,但它不会捕获何时调用无法到达服务器,或者在它遇到服务器代码之前抛出错误,例如,如果MVC用户不再进行身份验证。 – 2017-01-13 14:02:32
这是我的补充。
从http://www.learnjavascript.co.uk/jq/reference/ajax/getjson.html和the official source
“的jqXHR.success(),jqXHR.error(),和jqXHR.complete()回调 jQuery中引入1.5方法弃用的jQuery 1.8的。为了制备 你对他们的最终移除代码,使用jqXHR.done(), jqXHR.fail(),和jqXHR.always(),而不是“
我做到了,这里是卢西亚诺的更新程式码:
$.getJSON("example.json", function() {
alert("success");
})
.done(function() { alert('getJSON request succeeded!'); })
.fail(function() { alert('getJSON request failed! '); })
.always(function() { alert('getJSON request ended!'); });
并与错误的描述以及显示所有JSON数据作为一个字符串:
$.getJSON("example.json", function(data) {
alert(JSON.stringify(data));
})
.done(function() { alert('getJSON request succeeded!'); })
.fail(function(jqXHR, textStatus, errorThrown) { alert('getJSON request failed! ' + textStatus); })
.always(function() { alert('getJSON request ended!'); });
如果你不喜欢警报,以console.log
$.getJSON("example.json", function(data) {
console.log(JSON.stringify(data));
})
.done(function() { console.log('getJSON request succeeded!'); })
.fail(function(jqXHR, textStatus, errorThrown) { console.log('getJSON request failed! ' + textStatus); })
.always(function() { console.log('getJSON request ended!'); });
什么是完成,失败,总是和getJSON内的代码的时间顺序? – TheLogicGuy 2016-08-05 19:58:57
注意:console.log没有在IE7的旧版浏览器中实现! 以防万一您使用它! – MadMad666 2017-06-28 20:38:09
替代他们,我知道它已经因为同时有人在这里回答,海报可能已经从这里或从其他地方得到了他的答案。不过,我认为这篇文章将帮助任何人寻找一种方法来在执行getJSON请求时跟踪错误和超时。所以我的回答如下的问题
的的getJSON结构如下(在http://api.jqueri.com找到):
$(selector).getJSON(url,data,success(data,status,xhr))
大多数人实现,使用
$.getJSON(url, datatosend, function(data){
//do something with the data
});
,他们使用的URL VAR提供指向JSON数据的链接,用于添加"?callback=?"
和必须发送的其他变量以获取返回的正确JSON数据的地方的datatosend,以及作为处理数据的函数的成功funcion。
但是,您可以在您的成功功能中添加status和xhr变量。状态变量包含以下字符串之一:“成功”,“notmodified”,“错误”,“超时”,或“parsererror”,并且XHR变量包含返回XMLHttpRequest对象 (found on w3schools)
$.getJSON(url, datatosend, function(data, status, xhr){
if (status == "success"){
//do something with the data
}else if (status == "timeout"){
alert("Something is wrong with the connection");
}else if (status == "error" || status == "parsererror"){
alert("An error occured");
}else{
alert("datatosend did not change");
}
});
这种方式很容易跟踪超时和错误,而无需实现一旦请求完成就启动的自定义超时跟踪器。
希望这可以帮助有人仍然在寻找这个问题的答案。
这不起作用。顾名思义,“成功”回调仅在成功时才被调用。 (所以我不确定什么“状态”参数是...) – jwelsh 2015-06-26 18:06:58
在某些情况下,您可能会遇到与此方法同步的问题。 我写了一个setTimeout
函数内的回拨电话,和它的工作同步就好=)
E.G:
function obterJson(callback) {
jqxhr = $.getJSON(window.location.href + "js/data.json", function(data) {
setTimeout(function(){
callback(data);
},0);
}
为什么不
getJSON('get.php',{cmd:"1", typeID:$('#typesSelect')},function(data) {
// ...
});
function getJSON(url,params,callback) {
return $.getJSON(url,params,callback)
.fail(function(jqXMLHttpRequest,textStatus,errorThrown) {
console.dir(jqXMLHttpRequest);
alert('Ajax data request failed: "'+textStatus+':'+errorThrown+'" - see javascript console for details.');
})
}
?
有关使用.fail()
方法(jQuery的1.5+)的详细信息,请参阅http://api.jquery.com/jQuery.ajax/#jqXHR
由于jqXHR
由函数返回,一个链接等
$.when(getJSON(...)).then(function() { ... });
是可能的。
$.getJSON("example.json", function() {
alert("success");
})
.success(function() { alert("second success"); })
.error(function() { alert("error"); })
它被固定在jQuery的2.x的;在jQuery 1.x中,你永远不会得到一个错误回调
- 1. $ .getJSON()调用抛出错误
- 2. getJSON成功处理程序没有被调用,没有错误迹象
- 3. 多处理调试错误
- 4. 调用C#程序后的批处理文件错误处理
- 5. 的getJSON响应处理
- 6. ajax调用后处理php错误
- 7. 处理jQuery.ajax错误跨域JSONP调用
- 8. Firefox中的getJSON错误
- 9. 在Go中处理调试错误
- 10. Express.js:从路由处理函数调用下一个(错误)是否调用全局错误处理中间件?
- 11. 错误$ .getJSON - jQuery的 -
- 12. jQuery - 调用$ .getJSON时出错
- 13. Applescript中的tell block中的处理程序调用错误
- 14. 离子中的http调用中的处理错误2
- 15. 在C++中处理字符串错误时的错误处理
- 16. 错误处理Spark Cassandra连接器中的错误处理
- 17. LuaJava错误处理中的错误
- 18. jQuery与ASP.NET MVC中的getJSON调用时出现错误
- 19. 如何以编程方式调用$ .getJSON中的错误函数?
- 20. Javascript getJson异常处理
- 21. 处理jQuery.getScript中的错误
- 22. flex中的错误处理
- 23. “simplexml_load_file”中的错误处理
- 24. php中的错误处理
- 25. Struts2中的错误处理
- 26. wxWidgets中的错误处理
- 27. Laravel中的错误处理
- 28. Observable中的处理错误
- 29. 使用$ .getJSON方法错误
- 30. Angular Js中的REST调用的全局错误处理
似乎是**的副本** [如何使用JSONP捕获jQuery $ .getJSON(或$ .ajax数据类型设置为'jsonp')错误? ](http://stackoverflow.com/questions/309953/how-do-i-catch-jquery-getjson-or-ajax-with-datatype-set-to-jsonp-error-w)** – hippietrail 2011-12-18 16:04:42
Ajay,为什么没有考虑标记正确答案? – 2015-03-19 12:30:47
@IonicăBizău现在标记。我刚刚失踪了一段时间。最重要的答案不是在谈论JSONP。正如Ben Shelock指出的那样,没有支持的错误处理程序是我相信的。如果使用.error(),您是否必须使用另外两个? – Ajay 2015-03-19 21:15:25