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