一般而言,在無特別的情況下
需要前後端傳值的時候都會需要ajax傳遞值的時候
可是有時候明明前後端都沒有錯誤,可是傳值卻一直失敗,或一直抓不到回傳值
可能會回傳 undefined 又可能是null
是為什麼呢?
有大部分的原因是在於 async 的地方
以下是回傳失敗的範例(會是undefined 或 null) :
$.ajax({
type:'POST',
url:'Tools/abc.ashx?mode=abc',
dataType:'json'
}).success(function(data){
alert(data);
});
在這種情況下,如果確定自己的ajax事都沒有錯誤,就單純抓不到值的話
可以把ajax的設定加入以下這段 : async:false
就會變成
$.ajax({
type:'POST',
url:'Tools/abc.ashx?mode=abc',
dataType:'json',
async:false
}).success(function(data){
alert(data);
});
完成這個工作後 會發現要抓的data值已經成功抓取到了。
======================我是分隔線========================
這個東西的意思是說
我上google翻譯 是說這個東西是 "異步"
(以下為個人見解,若有錯誤請提出更正XD)
以我個人見解解釋成
這個東西是 如果沒有打出來,沒有特別設定,預設會是true 也就是說,現在就是 異步=成立(對的)
表示說 現在這個ajax會去後台跑一些程式,而前端的程式success裡的程式它會先執行
等於是說 他現在是非同步的 後台跟前台都會同時做事情
那如果加了,就會變成
異步=不成立(不對)
顧名思義就是 我不要異步 我不要不同進行程式,
當你加上async的時候,它就會依照流程ajax跑進來後會先到後台執行完程式,而且回傳值
後才會執行到success裡面的程式
另外ajax裡面的 abc.ashx 是每個人傳的位置不一樣,因為我傳是傳到ashx裡面 有些人會是php或其他檔案 麻煩自行修改檔名跟副檔喔!
而ajax裡的mode是我個人這個ashx會用到蠻多次 ,藉由switch跑不同的function 若只用一次 即可不用mode