2013-05-22 26 views
1

我正在向远程服务器发送Ajax请求并以POST方法发送参数。 但我得到如下回应:Sencha Touch Ajax请求错误:原始null不被Access-Control-Allow-Origin允许。

**"MLHttpRequest cannot load http://rasovai.com/mobilecontact1.php?_dc=1369189135731. Origin null is not allowed by Access-Control-Allow-Origin. "** 

我读到这个错误,并发现这是因为CORS的,所以我加标题的要求如下:

Ext.Ajax.defaultHeaders = { 
             'Accept': 'application/json', 
             'Accept': 'Access-Control-Allow-Origin: *', 
             'Accept': 'Access-Control-Allow-Credentials: true', 
              'Accept': 'Access-Control-Allow-Methods: OPTIONS, GET, POST', 
             'Accept': 'Access-Control-Allow-Headers: Content-Type, Depth, User-Agent, X-File-Size, X-Requested-With, If-Modified-Since, X-File-Name, Cache-Control' 
            }; 

但我仍然我得到了同样的错误回应。

我能够打的URL服务器,但无法传递的参数。

任何人都可以在这方面帮助我吗?

感谢 依禅耆那教

回答

0

如果您使用Chrome浏览器可以使用--disable-web-security标志允许跨域请求,如果你正在构建到这个应用程序,这将很好地工作。如果你想通过PARAMS到服务器,那么你可以做如下How to use json proxy to access remote services during development

+0

一个问题我就是看到这里,禁用网络安全将只在开发过程中工作,但是当你在设备上测试此功能,它会再次引发同一CORS的问题。 – Gendaful

+0

我在我的iPad应用程序中使用AJAX(而不是JSONP)代理,它工作正常,没有任何错误。看起来桌面浏览器和移动webview有不同的安全策略。 – ThinkFloyd

+0

请对这个问题看:http://stackoverflow.com/questions/16767351/loading-dynamic-data-from-xml-file-in-grid-issu –

2

这些头需要通过服务器,而不是客户端发送。

+0

非常感谢。有没有其他的解决方法,我可以在客户端,使我不需要在服务器上进行更改。实际上,我对服务器没有经验,所以你能告诉我如何在服务器端进行更改以使其工作。 –

+0

在客户端绕过CORS并没有太多可以做的事情。要启用这些头服务器端,请看看:http://enable-cors.org/server.html – idbehold

+0

您认为json proxy可以帮助跨域请求吗? –

0

:看看这个线程的更多细节。

Ext.Ajax.request({ 
      url : serverURL, 
      jsonData : requestParams, // Object which encapsulates the request params 
      method : 'POST', 
      withCredentials: true, 
      useDefaultXhrHeader: false, 

      // List of header params can be sent as follows 
      headers : { 
       "Content-Type" : "application/json", 
       "Accept" : "application/json", 
       "Access-Control-Allow-Origin":"http://localhost:8080", 
       "Authorization":auth 
      }, 

      username : 'mobiliser', 
      password : 'secret', 
      success : function(response) { 
      } 
      failure : function() 
      { 
      } 

正如您在您的问题中所说,服务器位于不同的域上,您可能必须使用JSONP请求。

让我知道如果您有任何问题。

Thanks- Gendaful

+1

同样,'接入Control'头需要由服务器,而不是客户端发送。他们从客户端发送时绝对没有任何问题。 – idbehold

+0

如果您的sencha应用程序由于Cross Origin问题而无法直接与远程服务器通信,请在客户端创建一个Servlet并将其与Sencha应用程序放在同一台服务器上。您的sencha应用程序将与servlet通信,并且servlet将与远程服务器通信。这是CORS问题的一个工作。 – Gendaful

+0

谢谢你的帮助。是的,我认为idbehold也是正确的。嘿Gendaful我可以把PHP脚本文件放在本地服务器上,并将参数发送到PHP文件,然后PHP脚本将发送电子邮件。你能以这种方式引导我吗?请看看这个问题“http://stackoverflow.com/questions/16657005/email-form-detail-in-sencha-touch-giving-exception” –

相关问题