关于jquery:Internet Explorer中的跨域POST请求ajax

Cross-domain POST request ajax in internet explorer

我正在使用jquery 1.7.2,并希望向另一个域发出POST请求。它必须是一个POST请求。但这在Internet Explorer中不起作用(我在IE9上尝试过);它适用于所有其他浏览器。

我有这个剧本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
jQuery.support.cors = true;

jQuery(function() {
    $.ajax({
        crossDomain : true,
        cache: false,
        type: 'POST',
        url: 'http://someotherdomain/test.php',
        data: {},
        success: function(da) {
            console.log(JSON.stringify(da))
        },
        error: function(jqxhr) {
            console.log('fail')
            console.log(JSON.stringify(jqxhr))
        },
        dataType: 'json'
    });
});

我收回错误:

1
2
3
{"readyState":0,"status":0,"statusText":"Error: Access denied.

"}

我的php文件如下:

1
2
3
4
<?php
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET, POST, DELETE, PUT, OPTIONS');
echo json_decode(array('success' => 'yes'));


要支持IE<10中的CORS,必须修改Ajax方法以使用xdomainRequest对象。这个插件为你做的:https://github.com/jaubourg/ajaxhooks


Internet Explorer(包括IE9)不支持CORS。您必须代理所有跨域请求(发布到同一域上的PHP脚本,该脚本使用curl返回查询并返回响应)


你的剧本看起来不错,但我相信你需要改变:

1
header('Access-Control-Allow-Origin: *');

1
header('Access-Control-Allow-Origin: x-requested-with');

1
header('Access-Control-Allow-Origin: {Origin}');

其中origin是origin头的值。我的理解是,如果给出了一个原点,那么仅仅输入"*"就行不通了。

此外,IE8和IE9对此的支持是有限的,但是如果您像您所做的那样放置jQuery.support.cors = true,它就会起作用。


这在IE9中有效。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<!DOCTYPE html>
<head>
<script language="javascript" type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js">
<script language="javascript" type="text/javascript">
var url ="http://msdn.microsoft.com/en-us/library/windows/desktop/ms759148(v=vs.85).aspx";
function getRequest() {
    try { return new ActiveXObject("Msxml2.XMLHTTP.6.0"); }
    catch (e) {alert("Error while getting 6.0");}
    try { return new ActiveXObject("Msxml2.XMLHTTP.3.0"); }
    catch (e) {alert("Error while getting 3.0");}
    try { return new ActiveXObject("Microsoft.XMLHTTP"); }
    catch (e) {alert("Error while getting 2.0");}
    throw new Error("This browser does not support XMLHttpRequest.");
};
var request = getRequest();
request.open("POST", url, false);
request.send();
alert("Content from :"+url+":"+ request.responseText);

</head>
AJAX ActiveX