Safari和IE ajax随后的调用问题(.then)

时间:2017-03-28 14:22:14

标签: javascript jquery ajax promise deferred

我有这段代码:

var request1 = this.add(prod_id, pack_id_combination, button, pack_qty).then(function(rdata1){
  // this always works
  this.add(prod_id, case_id_combination, button, case_qty).then(function(rdata2){    
    // this sometimes (random) doesn't work
  }.bind(this), function(req, status, error){ console.log('case error',req, status, error); });
}.bind(this), function(){ console.log('pack error'); });

我省略了剩下的代码,因为它是一个庞大的类,也不可能构建一个jsfiddle,太多的东西。

但事实如下:

  • 我的js指向一个返回数据的php文件。它通过add()函数(见下文)

  • 进行ajax调用
  • 它始终适用于第一个电话,它有时不适用于第二个电话。

  • 在日志上,状态='错误',错误='' (空,所以这里没有信息)

  • 我也确定第二个add(),如果单独使用相同的参数调用,将始终有效。

  • 此外,它仅在safari和IE中存在这些问题,而不是在chrome,ff,android

  • 此外,仅在网上测试时才会出现这些问题,而在我的本地环境中始终可以正常使用。

  • Safari说它失去了联系。这是我能得到的唯一信息

add()函数非常简单:

add:function(idProduct, idCombination, callerElement, quantity){
    return $.ajax({
        type: 'POST'
        ,headers: { "cache-control": "no-cache" }
        ,url: baseUri + '?rand=' + new Date().getTime()
        ,cache: false
        ,dataType : "json"
        ,data: 'controller=cart&add=1&ajax=true&qty=' + ((quantity && quantity != null) ? quantity : '1') + '&id_product=' + idProduct + '&token=' + static_token + ( (parseInt(idCombination) && idCombination != null) ? '&ipa=' + parseInt(idCombination): '')
        ,success:function(data, status, req){
            console.log('ok');
        }
        ,error:function(jqXHR, textStatus, errorThrown){
            console.log(jqXHR.responseText, textStatus, errorThrown);
        }
    });
},//end add()

所以,我的问题是:有没有办法避免这个问题?这是一个常见的陷阱吗?是否存在避免此类问题的常见做法?

1 个答案:

答案 0 :(得分:0)

好的,我的问题是通过使用 GET请求而不是POST 来解决的。

可能Safari和IE都无法正确管理2个后续ajax POST请求,至少在特定情况下如此。或者,jquery 2.1.3(这里使用的版本)实现有一些微妙的问题/错误。

但是因为我经常有IE(惊喜......)和Safari(是的......)的随机css / js问题,我想这是他们而不是jquery。