我有带有 4 个 AJAX 请求的页面,这些请求会触发以将订单请求发送到第 3 方系统。首先,发送产品信息,然后将客户详细信息附加到订单上,然后是适用于订单的任何注释,最后是第四次“完成”订单的请求。
在 IE9、Firefox (mac + pc)、Safari (mac + pc) 和 Chrome (mac + pc) 中一切正常,但是,当从 IE<9 发送请求时,正确触发 AJAX 请求并返回正确响应没有错误,但似乎它为每个呼叫通过不同的会话发送,因此第 3 方系统将 4 个不同的请求识别为来自不同的会话。
如果我通过 IE8 中的地址栏一一发送请求,一切都按预期工作并且顺序捆绑在一起,只有通过 jQuery .ajax 发送时才会忘记会话。
我能做些什么来强制这些浏览器保持会话吗?
这是我的代码:
//function to add the product to the cart and cascade down to finalise the order
function addToCart(){
var jsonurl = "xxxxx/additem?variationID="+$('input[name="variationID"]').val()+"&token="+APIKey+"&callback=?";
$.ajax({
url:jsonurl,
type:'GET',
dataType:'json',
success:function(data){
if (data.response == "success"){
addLeadCustomer();
} else {
displayEnquiryError();
}
},
error:function(data){
displayEnquiryError();
}
})
}
//function to add the lead customer and cascade down to finalise the order
function addLeadCustomer(){
//add the lead customer to the order in J6
jsonurl = "http://xxxxx/leadcustomer?token="+APIKey+"&details[FirstName]="+$('input[name="Name"]').val()+"&details[Email]="+$('input[name="Email"]').val()+"&details[HomePhone]="+$('input[name="Phone"]').val()+"&callback=?";
$.ajax({
url:jsonurl,
type:'GET',
dataType:'json',
success:function(data){
if (data.response.ID > 0){
updateOrderAdditionalInfo();
}else{
displayEnquiryError();
}
},
error:function(data){
displayEnquiryError();
}
})
}
//function to update the order with the additional info and cascade down to finalise the order
function updateOrderAdditionalInfo(){
//update the order with additional information
jsonurl = "http://xxxxx/updateorder?token="+APIKey+"&details[Notes]="+$('input[name="EnquiryDate"]').val()+"\n\n"+$('select[name="NumberNights"]').val()+" nights\n\n"+$('select[name="NumberPeople"]').val()+" people\n\n"+$('textarea[name="Comments"]').val()+"&callback=?";
$.ajax({
url:jsonurl,
type:'GET',
dataType:'json',
success:function(data){
if (data.response == "success"){
completeOrder();
}else{
displayEnquiryError();
}
},
error:function(data){
displayEnquiryError();
}
});
}
//function to complete the order
function completeOrder(){
//complete the "order"
jsonurl = "http://xxxxx/completeorder?token="+APIKey+"&callback=?";
$.ajax({
url:jsonurl,
type:'GET',
dataType:'json',
success:function(data){
if (data.response == "success"){
$('.waiting').fadeOut(function(){
$('.enquirySuccess').fadeIn();
$('.cartItemsHolder').empty();
$('.cartItemsHolder').html('We have received your itinerary');
})
}
},
error:function(data){
displayEnquiryError();
}
});
}
$('#Form_enquiryForm').submit(function(){
validateForm();
if (failedValidation == 0){
$(this).fadeOut(function(){
$('.waiting').fadeIn();
//add the package to the cart
addToCart();
});
}
return false;
});
更新:我遇到了一些帖子,这些帖子给人的印象可能是因为 IE8 的缓存。这导致我在我的 AJAX 调用中尝试 cache:false 并向查询字符串 (&cachebuster="+Math.random()) 添加一个随机数参数,但都没有解决问题。