$ .getJSON在第二次调用时触发错误

时间:2014-04-29 11:22:06

标签: javascript jquery ajax getjson

这是我的jQuery函数:

function MyJSON(query){
    $.ajaxSetup({
        cache: false,
        jsonpCallback: 'SmartShopCallback',
        dataType: 'jsonp'
    });
    $.getJSON( api+query+'&jsoncallback=?', function( data ) {
      if (data['cmd']){
        if (data['cmd'] == 'ListProducts' && data['products']){
            DisplayProducts(data['products']);
        } else if (data['cmd'] == 'ProductSizes' && data['sizes']) {
            DisplayProductSizes(data['sizes']);
        } else if (data['cmd'] == 'ColorOptions' && data['colors']) {
            DisplayColorOptions(data['colors']);
        }
      }
    }).fail(function(jqxhr){
        $('#ss_msg').html('An error occured while receiving data');
        alert(jqxhr.responseText);
    });
}

.fail()回调函数仅在&cmd=ColorOptions时触发,仅在$.getJSON函数的第二次调用时触发。第三次,第二次,等等。 。 。没问题!

jqxhr.responseText似乎未定义。

现在,这就是我解决它的方法:

function SmartShopJSON(query){
    $.ajaxSetup({
        cache: false,
        jsonpCallback: 'SmartShopCallback',
        dataType: 'jsonp'
    });
    $.getJSON( api+query+'&jsoncallback=?', function( data ) {
        ...
        Bla Bla Bla
        ...
    }).fail(function(jqxhr){
        $('#ss_msg').html('An error occured while receiving data');
        alert(jqxhr.responseText);
    });
    var dummy = data['cmd'];
}

请注意我的修复'最后使用var dummy = data['cmd'];。这太疯狂了,但是做到了!当我删除此行时,错误会恢复!

由于alert(data['cmd'])作为测试不仅给出了正确的响应,而且还阻止了.fail()的触发,这就是解决方案!

但为什么呢?我想知道为什么我首先得到错误!有什么想法吗?

0 个答案:

没有答案