AJAX没有收到错误

时间:2017-02-07 18:16:58

标签: javascript jquery json ajax

我是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");
            }
        });

3 个答案:

答案 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");
            }
        });