firefox和chrome中 JQuery的ajax組件執行差別

最近作項目,發現了一個有意思的問題,本身解決不了,而後找別人一塊想,已解決; 問題爲:一個post請求,在chrome正常執行;在firefox中沒法執行(不報錯,只是請求失敗,後臺接受不到); 原代碼以下:ajax

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請求時,其後面沒有任何邏輯操做;問題就解決了.chrome

相關文章
相關標籤/搜索