在Sencha Touch 2中加载商店时,如何停止其他OPTIONS http请求?

时间:2012-04-19 20:16:52

标签: ajax sencha-touch sencha-touch-2

我正在Sencha Touch 2中编写应用程序,作为其中的一部分,我有许多使用ajax代理和json阅读器的商店从我的外部Web服务自动加载。该服务托管在与客户端不同的域上,因此我必须在服务器上设置Access-Control-Allow-Origin才能使其正常工作。

使用此设置,一切都在游泳,但我使用Fiddler来查看请求性能,我注意到我的webservice的每次调用实际上都是两次。一旦作为OPTIONS请求,然后再次作为预期的GET。据我所知,OPTIONS请求没有任何用处 - 至少在我的设置中 - 所以我想摆脱它以使加载性能变得更快。

有谁知道这是怎么回事?如果我可以在代理上设置一个可以关闭它的配置,那就太棒了,但我还没有找到它。

感谢您的期待!

2 个答案:

答案 0 :(得分:5)

我想出来了,这一切都与Sencha传递的x-requested-with标头及其ajax调用有关。这篇博客文章(http://remysharp.com/2011/04/21/getting-cors-working/)详细介绍,但简短的版本是在一个奇怪的功能中,浏览器发出的只有当您在请求中包含任何自定义标头时,才会检查航班选项。如果你没有在请求中添加任何标题,并且只是保持原样,那么GET将完全没有OPTIONS检查。

我在源代码中挖了一下,发现Sencha实际上确实有一个配置来控制是否发送x-requested-with,它只是在正常使用中没有暴露出来。

Ext.Ajax.setUseDefaultXhrHeader(false);

我只是在请求发出之前设置它,它会丢弃x-requested-with,只有GET会消失。

答案 1 :(得分:0)

您需要OPTIONS请求,因为您正在访问来自不同域的数据。选项称它用于获取Access-Control-Allow-Origin参数的值。如果没有提出OPTIONS请求,跨域将无法工作。