2009-08-17 64 views
1
var err = ''; 

err += 'err a'; 
myString = 'Blah'; 
new Ajax.Request('/check_me.php', 
    { 
     method:'get', 
     parameters: { 
       'string': myString 
      }, 
      evalScripts: true, 
      onComplete: function(t){ 
       var response = t.responseText; 
       if (response == false) { 
        //do nothing 
       } else { 
        err += 'err b.\n'; 
        //alert(err); 
       } 
      } 
     }); 

err+= 'err c'; 

alert(err); 

在上面,它應該提醒「err a」+「err b」+「err c」。但我只是得到「犯錯」+「錯誤c」。 如果我嘗試在oncomplete中提醒(err),那麼我可以看到文本被追加到它之前的任何值。在這種情況下,「err a」+「err b」。如果我關閉此警報框,最後警報框只顯示 a和c。如何在Javascript中的函數內添加文本到變量?

因此它從全局變量讀取值,但不寫入它。

如何讓它工作,即將其設置爲「b」?

感謝

回答

5

Ajax請求同步發生,所以後您的Ajax調用已經出動,不論響應是否已返回的Javascript在網頁上執行將繼續。

因此,當您的腳本提醒err變量時,您得到的輸出不是您所期望的,因爲onComplete尚未被調用。

+0

那麼我該怎麼做? – TigerTiger 2009-08-17 13:50:50

+0

@Wbdvlpr - 在onComplete方法內完成調用之後,而不是在Ajax.Request之後放置任何想要發生的事情。 – karim79 2009-08-17 13:54:35

+0

任何想法如何跟蹤何時完成結束?只是fyi ..如果我在完成功能中發出警報,那麼這個警報框會在最後一個彈出框之前彈出。 – TigerTiger 2009-08-17 13:58:07

2

「err er er c err b」是正確的輸出。訂單是:

  • 附加「err a」;
  • 創建一個新的AjaxRequest,開始請求(異步)
  • 追加 「ERR C」
  • AjaxRequest完整偏偏追加 「ERR B」

您需要可以發出請求同步(不推薦),或者將「err c」的附加內容移到完整的方法中(如「err b」is)。

+0

這是否意味着您在上面所述的順序中的最終警報(err)shoule打印?它沒有。 – TigerTiger 2009-08-17 13:53:20

+0

just fyi ..輸出的順序對我來說並不重要 – TigerTiger 2009-08-17 13:53:52

相關問題