2010-05-24 53 views
1

我正在學習Qooxdoo框架,我試圖使它與一個小的Django Web服務一起工作。 Django的web服務僅返回JSON數據是這樣的:Qooxdoo REST JSON請求問題 - 意外令牌,然後超時

{ "name": "Football", "description": "The most popular sport." } 

然後我用下面的代碼來查詢網址:

var req = new qx.io.remote.Request(url, "GET", "application/json"); 
req.toggleCrossDomain(); 

req.addListener("completed", function(e) { 
       alert(e.getContent()); 
        }); 
req.send(); 

不幸的是,當我執行的代碼,我得到意外的標記錯誤,然後請求超時。

Uncaught SyntaxError: Unexpected token : 
Native.js:91013011 qx.io.remote.RequestQueue[246]: Timeout: transport 248 
Native.js:91013011 qx.io.remote.RequestQueue[246]: 5036ms > 5000ms 
Native.js:91013013 qx.io.remote.Exchange[248]: Timeout: implementation 249 

JSLint報告說這是一個有效的JSON,所以我想知道爲什麼Qooxdoo不能正確解析它。

回答

5

問題是可能與這一行:

req.toggleCrossDomain();

crossDomain默認爲false,因此toggleCrossDomain將其設置爲true。這迫使qx.io.remote.Request使用腳本傳輸,它不像常規的XMLHttpRequest那樣工作:請求需要包含一個id,而服務器的響應必須使用相同的id並且將實際的響應包含在一個調用中到qx.io.remote.transport.Script._requestFinished()。這是更詳細的qx.io.remote包的文檔中解釋說:

http://demo.qooxdoo.org/current/apiviewer/#qx.io.remote

+0

謝謝,我將它部署在同一個域上,它的確有竅門。 – freiksenet 2010-05-25 15:28:14

0

您的請求已超時。 URL是否正確?是否有防火牆問題連接到它?基本上,您的代碼沒有收到您期望的JSON,而是收到超時錯誤。

+0

通過日誌,我可以看到服務器得到正確的要求,所以URL是正確的,請求到達它。 – freiksenet 2010-05-24 11:41:17

+0

好的。現在是時候給出迴應。你的錯誤是因爲錯誤信息(你實際上面發佈的)被解析爲JSON,事實並非如此。 – 2010-05-24 11:44:15

+0

我將超時時間增加到了1000000ms,JavaScript控制檯顯示它首先會引發意外的令牌錯誤,並且只會在稍後(稍後)發生超時。 – freiksenet 2010-05-24 11:53:45