0

我对 AJAX 很陌生,但是现在我想根据回调函数 xmlHttpReq.onreadystatechange 中更改的状态为文档上的全局变量设置一些值,我使用了类似的东西

function checkFile(fileUrl) {
    var xmlHttpReq = false;
    var self = this;
        // Mozilla/Safari
    if (window.XMLHttpRequest) {
        self.xmlHttpReq = new XMLHttpRequest();
    }
    // IE
    else if (window.ActiveXObject) {
        self.xmlHttpReq = new ActiveXObject("Microsoft.XMLHTTP");
    }

    if(self.xmlHttpReq == null){
    alert("Your browser does not support XMLHTTPReq")
    }

    self.xmlHttpReq.open('HEAD', fileUrl, true);
    self.xmlHttpReq.onreadystatechange = function() {
        if (self.xmlHttpReq.readyState == 4) {
            if (self.xmlHttpReq.status == 200) { 
         window.rett = 1;
        //alert(window.rett);
           } else if (self.xmlHttpReq.status == 404) { 
         window.rett = 0;
        //alert(window.rett);
            }
        }
    }
    self.xmlHttpReq.send(); 
}

checkFile在这样的 jquery 模板中使用:

<script id="resultTemplate" type="text/x-jquery-tmpl"> 
        <li> ${checkFile(link)} <b> {{if window.rett ==  1 }} ${link}   {{/if}}</b> </li> 
    </script>

但是当我window.rett在 Jquery 模板中访问时,它说未定义...

我想获取全局值的原因是我想根据全局值生成不同的 GUI。

也许这不是使用全局变量的好习惯?任何建议表示赞赏。

4

1 回答 1

1

很可能是因为当您尝试访问它时,AJAX 请求尚未完成(尚未达到状态 4),因此您的全局尚未声明(或者如果是,它仍然包含先前结果的值)

我建议您在回调中使用您的模板。这样,当您的模板检查该值时,该值已经存在:

function yourAjaxFunction(arg1, arg2,...,callback){

  //all AJAX setup codes here

  if (self.xmlHttpReq.readyState === 4) {
    if (self.xmlHttpReq.status === 200) { 
      //sending the callback a 1
      callback(1);
    } else if (self.xmlHttpReq.status === 404) { 
      //sending the callback a 1
      callback(0);
    }
  }

  //AJAX send codes

}

//how you should use it
yourAjaxFunction(arg1,arg2,...,function(rett){
  //use rett here
  //parse template here
});
于 2013-04-06T06:13:29.243 回答