2012-03-14 32 views
9

每当我创建jQuery.ajax请求时,它在URL使用HTTP协议时都可以正常工作。但是,当我向HTTP服务器发送相同的请求时,它的发送没有标头[HTTP_X_REQUESTED_WITH: XMLHttpRequest]。因此,服务器无法知道这是一个AJAX请求!当使用HTTPS时,jQuery.ajax不会发送正确的ajax标头

我已经试过:

  • 开关$阿贾克斯,.post的$,$不用彷徨
  • 强制使用beforeSend
  • 设置CrossDomain:true

注头:有没有跨域问题,请求是有效和处理的,但不是AJAX。

如果当前URL是http,但所请求的URL位于同一个域但使用HTTPS,则会发生此问题。 http://example.com/home 将使用AJAX POST张贴到

+5

这** **是一个跨域问题AFAIK。 [SOP](http://en.wikipedia.org/wiki/Same_origin_policy)要求请求位于同一个协议和端口上(如使用HTTP - > HTTPS和80 - > 443)。看起来(没有更多信息),jQuery *在幕后制作JSONP请求,忽略额外的HTTP标头。 – Matt 2012-03-14 13:46:49

+0

你的意思是当你在HTTP服务器上并向HTTPS服务器发出ajax请求吗? – 2012-03-14 13:52:57

+0

@MikeGleasonjrCouturier yest,情况就是这样。 – mjalajel 2012-03-14 13:59:37

回答

3

我在http和https之间做同样的事情得到了同样的问题。
我研究过这个,它是跨域问题。请尝试使用具有回调函数的JSONP来完成这些工作,而用于执行curl的服务器端页面最重要的是设置一些用于允许http连接到https的头部。这是下面:

header("Access-Control-Allow-Origin: your https url"); 
header("Access-Control-Allow-Methods: POST, GET"); 
header("Access-Control-Max-Age: 1728000"); 

header("Access-Control-Allow-Headers: Content-Type, Connection, Depth, User-Agent, X-File-Size, X-Requested-With, If-Modified-Since, X-File-Name, Cache-Control"); 
header("Connection: close");  
+0

请注意您的格式,不要将您的整篇文章格式化为代码块。 – 2012-12-31 10:13:57

1
$.ajax { 
    ... 
    ... 
    beforeSend : function(jqXHR, settings) { 
        jqXHR.setRequestHeader("HTTP_X_REQUESTED_WITH", "XmlHttpRequest" 
       } 

    ... 
    ... 
} 

希望这一个帮助:d

5

我试图基肖尔的做法,但头部没有被发送。我修改它,像这样设置标题:

$.ajax { 
    beforeSend: function(jqXHR, settings) { 
    jqXHR.setRequestHeader('X-Requested-With', 'XMLHttpRequest'); 
    }, 
    ... 
}; 

我正在使用jQuery 1.8.2。

相关问题