Internet Explorer 中的跨域 POST 请求 ajax
Posted
技术标签:
【中文标题】Internet Explorer 中的跨域 POST 请求 ajax【英文标题】:Cross-domain POST request ajax in internet explorer 【发布时间】:2012-05-10 20:50:03 【问题描述】:我正在使用 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'));
【问题讨论】:
How to get a cross-origin resource sharing (CORS) post request working 的可能重复项 相关:***.com/a/12014195/545328 重复:***.com/questions/13149122/… 【参考方案1】:Internet Explorer(包括 IE9)不支持CORS。您必须代理所有跨域请求(发布到同一域上的 PHP 脚本,使用 curl 重新发布您的查询并返回响应)
【讨论】:
【参考方案2】:要在 IE https://github.com/jaubourg/ajaxHooks
【讨论】:
【参考方案3】:您的脚本看起来正确,但我认为您需要更改:
header('Access-Control-Allow-Origin: *');
到
header('Access-Control-Allow-Origin: x-requested-with');
或
header('Access-Control-Allow-Origin: Origin');
其中 Origin 是 Origin 标头的值。我的理解是,如果已经给出了 Origin,那么仅仅加上 '*' 是行不通的。
此外,IE8 和 IE9 对此的支持有限,但如果你输入jQuery.support.cors = true
,它确实可以工作,就像你所做的那样。
【讨论】:
据我所知,jQuery.support.cors
是只读的,用于检测。
@theOther 不,这可以根据jQuery的文档设置:“如果浏览器可以创建XMLHttpRequest对象并且该XMLHttpRequest对象具有withCredentials属性,则cors等于true。启用跨域在不支持 cors 但允许跨域 XHR 请求(windows gadget 等)的环境中请求,设置 $.support.cors = true;.CORS WD", api.jquery.com/jQuery.support【参考方案4】:
这适用于 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>
【讨论】:
以上是关于Internet Explorer 中的跨域 POST 请求 ajax的主要内容,如果未能解决你的问题,请参考以下文章
Internet Explorer 为授权设置跨域 cookie
Internet Explorer 中允许的 Ajax 跨域请求
在 Internet Explorer 上使用 Windows 身份验证通过 SSL 进行跨域 ajax 调用失败
无法让跨域 getJSON 调用在 Internet Explorer 上运行,在 Firefox 上运行良好,在 IE 和 Firefox 的单个域上运行