Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Safari和IE ajax在后续调用中出现问题(.then)_Javascript_Jquery_Ajax_Promise_Deferred - Fatal编程技术网

Javascript Safari和IE ajax在后续调用中出现问题(.then)

Javascript Safari和IE ajax在后续调用中出现问题(.then),javascript,jquery,ajax,promise,deferred,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

我有这个密码:

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'); });
我省略了代码的其余部分,因为它是一个巨大的类,而且不可能构建一个JSFIDLE,太多的东西了

但事实是:

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

  • 它总是适用于第一次通话,有时不适用于第二次通话

  • 在日志上,状态='error',error=''(为空,因此此处没有信息)

  • 我还确信,如果使用相同的参数单独调用第二个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()

那么,我的问题是:有没有办法避免这个问题?这是一个常见的陷阱吗?有避免此类问题的常见做法吗?

好的,我的问题是通过使用获取请求而不是发布请求来解决的

至少在特定情况下,Safari和IE可能都无法正确管理随后的两个ajax POST请求。或者,jQuery2.1.3(这里使用的版本)实现有一些微妙的问题/bug


但是,由于我经常在IE(惊喜…)和Safari(是…)中遇到随机css/js问题,我猜是它们而不是jquery。

如前所述,它肯定不会起作用。在表达式
this.a.then(function(){this.b()})
中,第二个
this
对象将是全局范围,这几乎肯定不是您想要的。在
this.a.then(()=>{this.b()})
中,这两个this都指向同一个对象。你确定吗?我把所有的东西都装订好了。另外,如前所述,事实上,它不仅在远程环境中有效,而且只在safari和IE中有效。这是fat arrow和这个的主要区别。我使用的是jquery,而不是js6。你能不能在一个常规的答案上贴一些更明确的代码,这样我才能更好地理解?另外,我所有的绑定(这个)以及它在列出的用例中工作的事实(从几年前开始,它是一个在线生产站点)怎么样?不管设置是否正确,如果没有内部this.add上的return语句,我看不出request1有什么意义