2011-08-28 40 views
-4
<html> 
     <head> 
      <script type="text/javascript" src="jquery.js"></script> 
     </head> 
     <body> 
      <script type="text/javascript"> 
       var currenttime; 
       function getDateInfo() { 
       $.get("time.php?a=" + Math.random() , function(data) { 
        return data; 
        }); 

       } 

       currenttime = getDateInfo(); 
       alert(currenttime); 
     </script> 
    </body> 
</html> 
/**************file time.php contains following code************/ 
<?php 
    echo "August 27, 2011 19:30:52"; 
?> 

朋友你好,請幫爲什麼這個代碼不工作..

+4

你想做什麼?您收到了哪些錯誤? – afuzzyllama

+0

這不是它的工作原理。 – cwallenpoole

+1

對於downvoters來說:確實,OP可以更好地問它;但是如果你花一點時間閱讀代碼,很明顯問題是什麼 - 順便說一下,這是一個有趣的問題。 –

回答

2

get調用是異步的。只要它已經要求瀏覽器開始遠程請求,它就會返回到您的代碼。然後,您的代碼將顯示警報,而無需等待請求完成 - 所以當時當然沒有結果。

這就是爲什麼函數需要一個回調參數而不是僅返回結果。您的回調將在getDateInfo()已返回之後很長時間運行,並且您必須安排一些事情,以便回調函數開始而不是調用$.get的代碼。

+0

你確定嗎?我用'setTimeout(「alert(currenttime);」,3000)替換了'alert(currenttime)';'並且ajax調用需要50到100 ms(因此在結果到達後觸發警報),但仍然是警報吐出'未定義'。爲什麼? –

+1

這是因爲結果永遠不會存儲在'currenttime'中。 'currenttime'中存儲的是來自'getDateInfo'的結果值,它沒有定義,因爲它沒有'return'語句。回調函數中的'return'返回服務器對jQuery內部調用回調的代碼的回覆 - 這是沒有意義的,因爲代碼根本不期望回調的任何返回值。 –

+0

啊,我明白了!基於(清晰的)解釋,我進一步將函數代碼改爲'var t = $ .get(「time.php?a =」+ Math.random(),function(data){return data;});返回t;',期待這個改變會使警報立刻工作,但仍然有些問題,因爲現在它顯示'[object Object]'(在Firefox中)。 –

0

您試圖將數據返回給匿名函數。您必須在$ .get操作的回調中設置當前時間。

var currentTime; 
$.get("time.php?a=" + Math.random() , 
     function(data) { // this will execute when the server request is complete & successful. 
      currentTime = data; 
      alert(currentTime); 
    });