1. 程式人生 > 其它 >工作留檔--$.post和$.ajax區別

工作留檔--$.post和$.ajax區別

技術標籤:jsjavaajaxjavascriptjs

今天部署開發任務的時候,我接到的活中有一個修改bug的活(哈哈,水平不夠bug來湊),這個bug是這樣式的,點選修改,下拉框動態載入資料有時可以載入到有時又不能獲取到。這個是不是很神奇啊。剛開始拿到這個任務的時候,我就考慮到了載入順序的問題。果不其然啊,我一看js程式碼,我的乖乖,通篇全用的$.post,部分程式碼如下:

$.post(url, Obj, function(result){
	var dataObj=eval("("+result+")");//為啥要寫這句程式碼,後面說
	...
..............//後面就不寫了

我修改之後的程式碼如下:

function getA(){	
var Obj = {
			className:'這個就自己看自己的嘍',
			methodName:'同上',
	};
	$.ajax({    
		   url: url,
		   data:Obj,    
		   type:'post',    
		   dataType:'json', 
		   async:false,//下方有解釋
		   success:function(result) {
			var dataObj= result;
			*******//下面就不寫了

上述程式碼的*async:false;*解釋如下:
在ajax中,async來控制非同步或同步,預設為true,表示為非同步請求,在具體執行過程的表現為,在這個Ajax程式碼執行的過程中其它程式碼同樣可以執行,那麼這裡就可能出現一個問題,在ajax請求執行中,可能ajax還未執行完,就可能已經完成了ajax請求後面的操作。(這也是我這個bug出現的原因)。但是當設定為false時,表現的為同步請求,同步請求的意思就是當js程式碼執行到當前ajax時,會停止頁面中的所有程式碼,當Ajax請求執行完畢後,才繼續執行。
而$.post預設就是為非同步請求,所以會出現很多很多這樣的問題,資料還沒加載出來呢,你就完事了。就像結婚新娘還沒接到家呢,你婚禮就完事了。那是不是就感覺肯定缺少點啥。

總結:因此我的修改bug的重任就在這同步和非同步的恍惚之間解決了。

差點忘了:

	var dataObj=eval("("+result+")");//為啥要寫這句程式碼,現在說

解釋:如果jquery非同步請求沒做型別說明,或者以字串方式接受,那麼需要做一次物件化處理,就是將該字串放於eval()中執行一次。這種方式也適合以普通javascipt方式獲取json物件。