如何处理getJSON调用中的错误?我试图引用一个跨域脚本服务使用jsonp,你如何注册一个错误方法?
当前回答
我也面临同样的问题,但我没有为失败的请求创建回调,而是简单地用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
}
});
其他回答
为什么不
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() { ... });
是可能的。
我也面临同样的问题,但我没有为失败的请求创建回调,而是简单地用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
}
});
有人能告诉卢西亚诺以下几点吗? 我刚刚测试了他的答案——有一个类似的问题——结果非常完美……
我甚至还加上了我的50美分:
.error(function(jqXHR, textStatus, errorThrown) {
console.log("error " + textStatus);
console.log("incoming Text " + jqXHR.responseText);
})
这是我的加法。
来自http://www.learnjavascript.co.uk/jq/reference/ajax/getjson.html和官方来源
jqXHR.success()、jqXHR.error()和jqXHR.complete()回调 jQuery 1.5中引入的方法在jQuery 1.8中已弃用。来 为最终删除它们准备代码,使用jqXHR.done(), jqXHR.fail()和jqXHR.always()代替。”
我这样做了,这里是Luciano的更新代码片段:
$.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!'); });
这是一个相当老的线程,但它确实出现在谷歌搜索,所以我想我将添加一个jQuery 3答案使用承诺。这个片段还显示:
您不再需要切换到$。Ajax来传递您的不记名令牌 使用.then()来确保您可以同步处理任何结果(我遇到了这个问题。always()回调触发太快-尽管我不确定这是100%正确的) 我使用.always()来简单地显示结果,无论是积极的还是消极的 在.always()函数中,我用HTTP状态代码和消息体更新了两个目标
代码片段如下:
$.getJSON({
url: "https://myurl.com/api",
headers: { "Authorization": "Bearer " + user.access_token}
}).then().always( function (data, textStatus) {
$("#txtAPIStatus").html(data.status);
$("#txtAPIValue").html(data.responseText);
});
推荐文章
- 一元加/数字(x)和parseFloat(x)之间的区别是什么?
- angularjs中的compile函数和link函数有什么区别
- 删除绑定中添加的事件监听器
- 如何在JSON中使用杰克逊更改字段名
- 很好的初学者教程socket.io?
- HtmlSpecialChars在JavaScript中等价于什么?
- React: 'Redirect'没有从' React -router-dom'中导出
- 如何在React中使用钩子强制组件重新渲染?
- 我如何使用Jest模拟JavaScript的“窗口”对象?
- 我如何等待一个承诺完成之前返回一个函数的变量?
- 在JavaScript中根据键值查找和删除数组中的对象
- 使嵌套JavaScript对象平放/不平放的最快方法
- 如何以及为什么'a'['toUpperCase']()在JavaScript工作?
- 有Grunt生成index.html不同的设置
- 文档之间的区别。addEventListener和window。addEventListener?