1. 程式人生 > >獲取$.post $.get回撥函式返回值問題

獲取$.post $.get回撥函式返回值問題

專案中用Jquery操作,肯定避免不了向伺服器傳送請求,所以就會用到上面的兩個函式。完整的函式格式如下:

?$.get(URL,callback);

?$.post(URL,data,callback);

而某些時候我們要用callback回撥函式處理完以後的返回值,常規的思路是定義一個全域性變數來接收返回值,然後在$post的外面,函式的裡面返回即可。例如,下面為一個js函式:

function testAsync(){ //定義一個全域性變數來接受$post的返回值 var result; //呼叫一般處理程式 $.post("handler/QueryCourseByFirst.ashx"

,{Sqls: sql4 }, function(courseDT4){ result = courseDT4; }); return result; }

然後哪裡需要這個函式就直接呼叫即可,例如:

//呼叫函式 var res = testAsync();

看上去邏輯上貌似沒問題,但試過就知道這樣是存在問題的了,發現res通常取不到courseDT4。除錯就會發現函式的執行順序並不是順序執行的。那麼自然就想到了$.post發得請求為“非同步”請求,所以發出請求後還沒等一般處理程式處理返回結果,就執行了為res變數賦值,因此取到的值總為undefined

經過查詢,可以發現

Jquery封裝好的$.post $.get發得請求都為“非同步”請求(最好檢視一下Jquery的原始碼),當然上面的用於獲取回撥函式返回值的寫法是錯誤的,只需將傳送方式改為同步即可,即如下程式碼:

function testAsync(){ //定義一個全域性變數來接受$post的返回值 var result; //用ajax的“同步方式”呼叫一般處理程式 $.ajax({ url:"handler/QueryCourseByFirst.ashx", async:false,//改為同步方式 type:"POST", data:{Sqls

: sql4 }, success:function(courseDT4){ result = courseDT4; } }); return result; }

然後再直接呼叫函式就沒有問題了,如下:

//呼叫函式 var res = testAsync();