最近做项目,发现了一个有意思的问题,自己解决不了,然后找别人一块想,已解决; 问题为:一个post请求,在chrome正常执行;在firefox中无法执行(不报错,只是请求失败,后台接受不到); 原代码如下:
function addCustom(o) {
var qy = o[0]["value"];// regionId
qy = qy.replace(" ", "");
var glxs = o[1]["value"];//
var km_ratio = o[2]["value"];
if (km_ratio == "") {
alert("请设置扣罚系数");
return;
} else if (qy == "") {
alert("请设置扣罚区域");
return;
}
if (jQuery.inArray(qy, regionArr) > -1) {
alert("请勿重复添加自定义区域!");
} else if (qy.length > 5 && qy.length < 8) {
var num = (qy + "").substring(4);
if (num != '00') {
oilForm(km_ratio, qy);// 执行添加
} else {
alert("请选择县级区域!!");
}
} else {
alert("请选择县级区域!!");
}
location.href = '/monthTask/punish';
}
/*
* 添加自定义扣罚系数区域
*/
function oilForm(km_ratio, qy) {
var newPunish = {
"regionId" : qy,
"rate" : km_ratio
}
// 发送请求
$.ajax({
url : 'monthTask/punish',// 添加公里系数设置区域
type : 'post',
data : newPunish,
dataType : "json",
success : function(result) {
alert("已成功添加");
location.href = '/monthTask/punish';
},
error : function(data) {
if (500 == data.status) {
alert("系统异常,请稍后重试!");
} else {
location.href = '/monthTask/punish';
}
}
});
}
- 分析:当执行addCustom方法,并执行到oilForm方法时,oilForm执行ajax方法,firefox没有等到ajax请求执行完,就执行了页面跳转操作;
- 相关原理:chrome将ajax作为一般进程处理,而firefox将ajax作为后台进程(daemon Thread)处理;
- 解决方案:在ajax请求之后不要进行其他的业务操作;将所有的相关逻辑都写进ajax里; 修改后的addCustom方法
function addCustom(o) {
var qy = o[0]["value"];// regionId
qy = qy.replace(" ", "");
var glxs = o[1]["value"];//
var km_ratio = o[2]["value"];
if (km_ratio == "") {
alert("请设置扣罚系数");
return;
} else if (qy == "") {
alert("请设置扣罚区域");
return;
}
if (jQuery.inArray(qy, regionArr) > -1) {
alert("请勿重复添加自定义区域!");
} else if (qy.length > 5 && qy.length < 8) {
var num = (qy + "").substring(4);
if (num != '00') {
oilForm(km_ratio, qy);// 执行添加
} else {
alert("请选择县级区域!!");
location.href = '/monthTask/punish';
}
} else {
alert("请选择县级区域!!");
location.href = '/monthTask/punish';
}
}
现在,当方法中执行到ajax请求时,其后面没有任何逻辑操作;问题就解决了.