2013-04-06 136 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

    相關問題