我使用jQuery 1.7.2,并想使一个POST请求到另一个域。 它必须是一个POST请求。 但是,这并不在Internet Explorer(我试过IE9) 工作 ; 它适用于所有其他浏览器。
我有此脚本:
<script>
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'
});
});
</script>
我回来的错误:
{"readyState":0,"status":0,"statusText":"Error: Access denied.\r\n"}
我的PHP文件看起来像这样:
<?php
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET, POST, DELETE, PUT, OPTIONS');
echo json_decode(array('success' => 'yes'));
的Internet Explorer(包括IE9)不支持CORS 。 你必须代理所有的跨域请求(后到PHP脚本在同一个域,与卷曲转播查询并返回响应)
为了支持在CORS IE <10,则必须修改以使用XDomainRequest对象的AJAX方法。 这个插件会为你: https://github.com/jaubourg/ajaxHooks
你的脚本看起来正确的,但我相信你需要改变:
header('Access-Control-Allow-Origin: *');
至
header('Access-Control-Allow-Origin: x-requested-with');
要么
header('Access-Control-Allow-Origin: {Origin}');
其中{}来源是起源标头的值。 这是我的理解是,只是把“*”如果产地已经给出将无法正常工作。
此外,IE8和IE9提供有限支持这个,但如果你把它的工作jQuery.support.cors = true
,因为你所做的一切。
这部作品在IE9。
<!DOCTYPE html>
<head>
<script language="javascript" type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<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);
</script>
</head>
<h1>AJAX ActiveX</h1>