2011-10-17 62 views
1

工作我使用prototype.js製作Ajax請求。一切工作正常,直到我將asynchronous更改爲false(因爲我想進行同步請求)。以下是我的代碼中的幾行。阿賈克斯不同步的方式

var commOptions = { 
       contentType: 'text/xml', 
       method: 'post', 
       asynchronous: true, 
       evalJS: false, 
       evalJSON: false 
      }; 
    sProxy_Url = sUrl; 
    new Ajax.Request(sProxy_Url, commOptions); 

如果我改變asynchronousfalse然後阿賈克斯不工作。我錯過了什麼?

+1

定義不工作,因爲它在這裏工作http://jsfiddle.net/HRu78/ – Esailija

+0

@Esailija:我的Ajax調用給出了HTML響應。如果我將「異步」更改爲「假」,我沒有看到任何迴應。 – xyz

+0

添加代碼,您應該處理您的問題的迴應,因爲jsfiddle可以正常使用您提供的代碼。 – Esailija

回答

1

老實說,我看不出有什麼不工作,我甚至得到了JavaScript中的響應,以確保:

var commOptions = { 
       contentType: 'text/xml', 
       method: 'post', 
       asynchronous: false, 
       evalJS: false, 
       evalJSON: false 
      }; 

    var a = new Ajax.Request("/", commOptions); 
console.log(a.transport.responseText.length); //16898 

http://jsfiddle.net/HRu78/1/

+0

明白了,這是我的錯誤。 – xyz

+2

很高興你能工作。我沒有告訴你如何設計你的應用程序,但是根據我的經驗,當我認爲我確實需要使用同步時,總會發現有一種異步方式更好。 – tinyd

+0

我會嘗試以異步方式完成它。感謝您的建議。 – xyz

0

它只是始終建議使ajax請求異步,因爲使它們同步將阻止主JavaScript線程,這提供了糟糕的用戶體驗(請參閱this)。

但是,如果你真的想使用同步選項,你會當您運行的代碼必須發生的事情一點更加明確 - 做瀏覽器塊?或者函數返回但沒有數據?

+0

我必須同步使用它。當我進行同步呼叫時,我得到沒有數據的響應。 – xyz

+0

通過「你需要有點更清晰」我認爲tinyd意味着他需要知道你讀什麼財產,什麼HTTP狀態代碼返回信息,甚至可能貼所有相關的代碼。不工作需要多長時間 - 是瞬間的? – thomasrutter

+0

@thomasrutter - 是的,這就是我的意思! Ajinkya - 在Firebug(或Chrome或IE)日誌中查看是否正在發送請求是值得的。另外,你能否說出哪些瀏覽器出現錯誤? – tinyd