Answers:
$.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"); });
JSONP
似乎getJSON
没有专门询问跨站点问题error()
。我有同样的问题。我想这是与如何做JSONP
的处理完全不同,以正常AJAX
的通话jQuery
,尽管getJSON
同时处理。JSON
是通过XMLHTTPRequest
对象完成的,但是JSONP
可以通过向<script>
页面的动态添加标签来完成HEAD
。
有人给卢西亚诺这些要点:)我刚刚测试了他的答案-遇到了类似的问题-并且运行良好...
我什至加上我的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和官方资源
“ jQuery 1.5中已弃用了jQuery 1.5中引入的jqXHR.success(),jqXHR.error()和jqXHR.complete()回调方法。要准备将其最终删除,请使用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!'); });
我知道已经有一段时间了,因为有人在这里回答,而发帖人可能已经从这里或其他地方得到了他的答案。但是,我确实认为,这篇文章将对任何寻求在执行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数据的链接,而data则作为添加 "?callback=?"
必须发送的变量和其他变量以获取正确的JSON数据的位置,并将成功函数用作处理数据的函数。
但是,您可以在成功函数中添加status和xhr变量。状态变量包含以下字符串之一:“成功”,“未修改”,“错误”,“超时”或“ parsererror”,而xhr变量包含返回的XMLHttpRequest对象(在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");
}
});
这样,就很容易跟踪超时和错误,而无需实现在请求完成后启动的自定义超时跟踪器。
希望这可以帮助仍在寻找该问题答案的人。
$.getJSON("example.json", function() {
alert("success");
})
.success(function() { alert("second success"); })
.error(function() { alert("error"); })
它在jQuery 2.x中已修复;在jQuery 1.x中,您永远不会收到错误回调
我遇到了同样的问题,但是我没有为失败的请求创建回调,而是直接返回了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() { ... });
是可能的。