2013-04-06 88 views
0

我非常新的AJAX的东西,但现在我想为某个值设置为基于状态的文档的全局变量在回调函数xmlHttpReq.onreadystatechange改变,我用类似有没有办法在回调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> 

,但是当我在一个jQuery模板访问window.rett,它说不确定...

的reaso n我想获得全局值是我想根据全局值生成不同的GUI。

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

+0

它只是一个成功和错误的情况,你想渲染不同? – SHANK 2013-04-06 06:07:25

+0

@SHANK我想也许不是。我今天刚学过这些东西,并且正在尝试构建一些东西,当我遇到这个问题时...... – monica 2013-04-06 06:09:55

+0

您刚刚编辑了代码以使用事件?您的事件处理程序中的警报是否在正确的时间触发? – 2013-04-06 06:26:57

回答

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 
}); 
+0

如果我的原始'yourAjaxFunction'以这种方式使用,这种方法可以在senario中工作吗? '<脚本ID = “resultTemplate” 类型= “文本/ X-jQuery的TMPL”>

  • {{如果yourAjaxFunction(链接)== 1}} $ {链接} {{/如果}}
  • ' – monica 2013-04-06 06:29:54

    +1

    @monica然后最好你包括**所有**相关的代码。另外,AJAX不是同步操作(不是顺序/程序)。更好[关于AJAX的阅读模式](https://developer.mozilla.org/en-US/docs/AJAX) – Joseph 2013-04-06 06:31:57

    +0

    感谢您的链接!并在更新中列出所有相关的代码。 – monica 2013-04-06 06:46:29

    相关问题