2010-07-07 50 views
0
function get_request(url) { 
    var request = new getXMLObject(); 
    request.onreadystatechange = function() { 
    if (request.readyState == 4) { 
     alert(request.responseText); 
     var data = eval('(' + request.responseText + ')'); 
     alert(data); 
     return data; 
    } 
    } 
    request.open("GET", url, true); 
    //alert(document.getElementById('energy').innerHTML); 
    request.send(); 
} 

function loadjobs() { 
    var url = "loadjobs.php?tab=1&id=1111"; 
    //var data= 
    //alert(check()); 
    alert(get_request(url)); 
    //alert(data); 
} 

當即時得到JSON格式的數據...我在alert(get_request(url)); 剛開NULL而IM在alert(data);調用Ajax時

獲得幫助我

回答

3

這是因爲請求是異步的。 get_request(url)函數確實返回任何東西,因此返回null(儘管我認爲它應該是未定義的而不是null)。

onreadystatechange函數在AJAX請求完成並且數據從服務器返回並且因此警報在那裏工作的時間稍後調用。

0

這是一種誤解入門未定義在javascript AJAX如何工作。 Ajax是異步onreadystatechange功能將在loadjobs()之後稱爲。您指定的「返回路徑」無法正常工作。 get_request()將永遠不能返回提取的值。

您有兩種選擇。要麼腳本同步 - 這可以完成,但不推薦,因爲它可以凍結瀏覽器。

或者,更好的辦法是處理onreadystatechange回調中需要做的所有事情。

0

問題是,Ajax請求異步工作。所以你不能馬上返回數據。你應該這樣做的方式是指定一個回調函數,它將處理響應數據。

function handleJSON(data) { 
    // ... 
    // do whatever you want to do with the data 
} 

ajax("url/file.php?param=value", handleJSON); 

//////////////////////////////////////////////////////////////////////////////// 

function getXmlHttpObject() { 
    var xmlHttp; 
    try { 
     xmlHttp = new XMLHttpRequest(); 
    } catch (e) { 
     try { 
      xmlHttp = new ActiveXObject("Msxml2.XMLHTTP"); 
     } catch (e) { 
      xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); 
     } 
    } 
    return xmlHttp; 
} 

function ajax(url, onSuccess, onError) { 
    var xmlHttp = getXmlHttpObject(); 
    xmlHttp.onreadystatechange = function() { 
     if (this.readyState == 4) { 
      // onError 
      if (this.status != 200) { 
       if (typeof onError == 'function') { 
        onError(this.responseText); 
       } 
      } 
      // onSuccess 
      else if (typeof onSuccess == 'function') { 
       onSuccess(this.responseText); 
      } 
     } 
    }; 
    xmlHttp.open("GET", url, true); 
    xmlHttp.send(null); 
    return xmlHttp; 
}​ 
0

那麼,這是一個異步調用。您將在get_request已返回後收到請求您的數據。這意味着您的request.onreadystatechange = function()將在alert(get_request(url));已完成後很長時間執行。這意味着get_request將無法​​從AJAX調用中返回任何數據。這就是你有request.onreadystatechange回調函數,以便在稍後收到響應時在未定義的時間執行代碼。