我是JSON,JS和AJAX的新手。我使用了一些示例代码来完成目标。我不明白的是,当JSON是一个错误对象时,成功部分仍在触发。控制台显示错误,其中对象d为空,或者当错误为真时显示非对象。我做错了什么? TIA
结果类型良好:
JSON: {"data":["1","breast","2","wing","3","thigh","4","leg","5","half","6","quarter white","7","quarter dark","9","whole"],"error":false}
结果类型错误:
JSON: {"error":true}
$.ajax({
type : 'GET',
url : 'getsubtypes2.php',
data : dataString,
dataType : 'JSON',
cache: false,
success : function(data) {
var output;
var d = data.data;
var output = "";
for (var i = 0 ; i< d.length; i=i+2) {//error gets to this line
var count = d[i];
var newOption = d[i+1];
output += "<option value='"+count+"'>"+newOption+"</option>";
}
$('#select3').empty().append(output);
},
error: function(){
$('#select3').empty();
console.log("Ajax failed");
}
});
答案 0 :(得分:2)
服务器必须返回错误状态代码(例如4xx或5xx)才能执行错误回调。如果服务器返回2xx,则将执行成功回调。
对于测试,您可以尝试显式发送错误代码以查看正在执行的error
回调。请参阅此question。
答案 1 :(得分:2)
JQuery的$.ajax()
例程依赖于HTTP响应代码来检测错误。如果服务返回200,即使在错误情况下(某些服务确实会发生),也可能发生这种情况。
尝试检查调试器中的网络面板,以查看服务实际返回的内容。
答案 2 :(得分:0)
根据建议,这会正确地发现错误
$.ajax({
type : 'GET',
url : 'getsubtypes2.php',
data : dataString,
dataType : 'JSON',
cache: false,
success : function(data) {
var output;
var d = data.data;
var e = data.error;
if(e) {
$('#select3').empty();
}
else {
var output = "";
for (var i = 0 ; i< d.length; i=i+2) {
var count = d[i];
var newOption = d[i+1];
output += "<option value='"+count+"'>"+newOption+"</option>";
}
$('#select3').empty().append(output);
}
},
error: function(){
console.log("Ajax failed");
}
});