在IIFE内部的Vanilla Javascript Ajax调用没有响应

时间:2014-02-23 16:11:40

标签: javascript ajax xmlhttprequest

嘿伙计们,我正在运行IIFE和ajax电话,而且似乎根本没有回复......

    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吗?

1 个答案:

答案 0 :(得分:2)

您指定的onreadystatechange函数是您需要处理responseText的位置。您需要在那里处理它或调用一些函数并将数据传递给它。请记住,ajax调用是异步的,这意味着您使用r.send()启动它,您的$.httpRequest()函数完成,执行后执行其他javascript,然后一段时间后ajax调用完成并调用您的{{ 1}}功能。此时,您所能做的就是在该函数中处理数据或调用其他函数并将数据传递给它。

以下是使用您传递到httpRequest函数的回调函数的一种方法:

onreadystatechange

使用示例:

   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();
   }

};