2011-07-21 92 views
0

我有Ajax請求(基本功能)Ajax請求返回未定義的結果

這裏的Ajax功能

function ajax(){ 
var activexmodes=["Msxml2.XMLHTTP", "Microsoft.XMLHTTP"] 
if (window.ActiveXObject){ 
    for (var i=0; i<activexmodes.length; i++){ 
    try{ 
    return new ActiveXObject(activexmodes[i]) 
    } 
    catch(e){ 
    } 
    } 
} 
else if (window.XMLHttpRequest) 
    return new XMLHttpRequest() 
else 
    return false 
} 

這裏有一個問題是另一個功能

_2xm.load = function (p, type) 
    { 
     p = p.replace("frame_", ""); 
     loading(type); 
     var req=new ajax(); 
     var __page =encodeURIComponent(p); 
     req.open("GET", "page.php?page="+__page, true); 
     req.send(null); 
     req.onreadystatechange=function(){ 
     if (req.readyState==4) 
     { 
      if (req.status==200 || window.location.href.indexOf("http")==-1) 
      { 
      loading(2); 
      return req.responseText; 
      } 
      else 
      { 
      loading(2); 
      return "An error was occured.... "; 
      } 
     } 
     } 
    } 

這裏部分代碼使用_2xm.load()功能:

_2xm.loadData = [_2xm.load(pg, 0), _2xm.now(), _2xm.interval * 60]; 

但結果是總是Undefined,爲什麼?

+0

我喜歡你的'ajax()'仔細考慮錯誤情況並在'XmlHttpRequest'對象無法創建時返回'false' ...然後你的'_2xm.load' **完全忽略** 。 –

回答

0

您從未從_2xm.load返回值,因此該函數隱式計算爲undefined

僅在函數調用_2xm.load完成後很長一段時間內,纔會異步返回綁定到req.onreadystatechange的匿名函數回調中的值,後者會在稍後階段觸發。

也許你應該考慮一個同步請求。

+0

謝謝,但是如何使一個函數發送一個請求,這將是一個「同步請求」 – John

+0

@John:無論您使用什麼文檔「XMLHttpRequest」,找到它中涉及同步請求的部分。 –