Safari 和 IE ajax 后续调用的问题 (.then)
Safari and IE ajax issues with subsequent calls (.then)
我有这个代码:
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'); });
我省略了其余的代码,因为它很大 class 而且也不可能构建一个 jsfiddle,太多东西了。
但事实是:
我的 js 指向一个 php 文件返回数据。它通过 add()
函数进行 ajax 调用(见下文)
第一次调用总是有效,第二次调用有时无效。
在日志上,status = '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()
所以,我的问题是:有没有办法避免这个问题?这是一个常见的陷阱吗?是否有避免此类问题的常见做法?
好的,我的问题已通过使用 GET 请求而不是 POST 请求得到解决。
Safari 和 IE 可能都无法正确管理 2 个后续 ajax POST 请求,至少在特定情况下是这样。或者,jquery 2.1.3(此处使用的版本)实现具有某种微妙的 problems/bugs.
但是由于我经常遇到 IE(惊讶...)和 Safari(是...)的随机 css/js 问题,我猜是它们而不是 jquery。
我有这个代码:
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'); });
我省略了其余的代码,因为它很大 class 而且也不可能构建一个 jsfiddle,太多东西了。
但事实是:
我的 js 指向一个 php 文件返回数据。它通过
add()
函数进行 ajax 调用(见下文)第一次调用总是有效,第二次调用有时无效。
在日志上,status = '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()
所以,我的问题是:有没有办法避免这个问题?这是一个常见的陷阱吗?是否有避免此类问题的常见做法?
好的,我的问题已通过使用 GET 请求而不是 POST 请求得到解决。
Safari 和 IE 可能都无法正确管理 2 个后续 ajax POST 请求,至少在特定情况下是这样。或者,jquery 2.1.3(此处使用的版本)实现具有某种微妙的 problems/bugs.
但是由于我经常遇到 IE(惊讶...)和 Safari(是...)的随机 css/js 问题,我猜是它们而不是 jquery。