2014-02-23 60 views
1

嗨,我運行的IIFE和Ajax調用,它似乎沒有反應......香草的Javascript調用Ajax內IIFE沒有響應

var $ = { 
    core:function(u){ 
     return new $.httpRequest(u); 
    }, 
    httpRequest:function(url){ 
     var text; 
     var r = new XMLHttpRequest(); 
      r.open("GET", url, true); 
      r.onreadystatechange = function() { 
      if (this.readyState != 4 || this.status != 200) return; 
       text = this.responseText; 
      }; 
      r.send(); 
      console.log(text); 
      return text; 
    } 
}; 

有什麼愚蠢的我失蹤?剛剛過了幾次,我的雙手充滿了希望,我們精明的SO成員可以提供幫助。我應該把回報放在onload內嗎?

+0

不*香草*真正的問題..? –

+1

從何種意義上說?意思是使用jQuery,然後是的。 – EasyBB

+0

謝謝你的回覆。現在我明白你所強調的是什麼。 –

回答

2

您分配的onreadystatechange函數是您需要處理responseText的地方。您需要在那裏處理它或者調用某個函數並將數據傳遞給它。請記住,ajax調用是異步的,這意味着您可以使用r.send()$.httpRequest()函數完成後啓動它,執行其他JavaScript,然後稍後ajax調用完成並調用您的onreadystatechange函數。在這一點上,你所能做的就是在那個函數中處理數據,或者調用其他函數並將數據傳遞給它。

下面是使用您傳遞到您的HttpRequest功能的回調函數做的一種方式:

var $ = { 
    core:function(u){ 
     return new $.httpRequest(u); 
    }, 
    httpRequest:function(url, callback){ 
     var r = new XMLHttpRequest(); 
      r.open("GET", url, true); 
      r.onreadystatechange = function() { 
      if (r.readyState != 4 || r.status != 200) return; 
      callback(r.responseText); 
      }; 
      r.send(); 
    } 

}; 

用法示例:

$.httpRequest("http://examplesite.com/myurl", function(data) { 
    // write code here to process the data 
}); 
+0

所以在'onreadystate'裏面放置返回正確的 – EasyBB

+0

不可以。你不能從你的httpRequest函數返回數據。這是異步編程,您的httpRequest函數早已完成。有一段時間你的ajax調用完成,然後纔有數據可用,你可以用它做些事情。 – jfriend00

+0

再次感謝! ) – EasyBB