2012-02-16 96 views
1
function get(){ 
     $.get('/get.php', function(data) { 
      alert('one: ' + data) 
      return data; 
     }); 
    } 

    var test = get(); 
    alert('two:' + test); 

在get.php是:

<?php echo "number"; ?> 

爲什麼一個警報顯示我 一個:數

而是兩個警報顯示我 二:不確定

我怎樣才能得到這個值以外的功能?

回答

7

$.get調用是異步的。這意味着你傳遞了一個回調函數(你的function(data) { ... },這個回調函數的執行結果是來自該回調函數的結果),在該回調函數中不能執行return - 執行時,外函數(執行$.get)已經返回。 ,嘗試這樣的事情:

// callback will be executed with the response from your GET request 
function get(callback){ 
    $.get('/get.php', callback); 
} 

// Call get with a callback receiving the response 
get(function(data) { 
    alert('two:' + data); 
}); 

這是一個模式,你將不得不習慣於編寫JavaScript代碼時

1

return data從阿賈克斯匿名函數返回,而不是從一開始()函數。

1

這是因爲當這個stat ement被調用,函數get()已經返回,之前已執行$ .get()的回調。請記住,ajax請求是異步

什麼是執行步驟:

  1. 調用get()
  2. Ajax請求以$獲得(),將啓動
  3. get()返回
  4. Ajax請求結束,$回調.get()被執行

要處理這種情況,您通常會將回調作爲參數傳遞:

function get(callback) { 
    $.get('/get.php', function(data) { 
     if ($.isFunction(callback)) { 
      callback(data); 
     } 
    }); 
}