2012-05-01 195 views
3

我正在使用jQuery 1.7.2並且想向另一個域發出POST請求。它必須是POST請求。但這是不能在Internet Explorer中工作(我在IE9上試過);它適用於所有其他瀏覽器。在Internet Explorer中跨域POST請求ajax

我有這樣的腳本:

<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')); 
+0

可能重複[如何獲得一個跨域資源共享(CORS)POST請求的工作(http://stackoverflow.com/questions/5750696/how-to-get-a-cross-origin -resource-sharing-cors-post-request-working) – Jon

+0

Relavent:http://stackoverflow.com/a/12014195/545328 – 65Fbef05

+0

重複:http://stackoverflow.com/questions/13149122/jquery-ajax-cross-就我所知,「jQuery.support.cors」是隻讀的,用於檢測的域形式提交問題(例如 – inf3rno

回答

2

的Internet Explorer(包括IE9)不不支持CORS。你必須代理所有的跨域請求(後到PHP腳本在同一個域,與捲曲轉播查詢並返回響應)

1

你的腳本看起來正確的,但我相信你需要改變:

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

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

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

其中{}來源是VALU e頭部的e。我的理解是,如果給出了一個Origin,那麼只是放置'*'將不起作用。

另外,IE8和IE9對此有限的支持,但是如果你像jQuery.support.cors = true那樣工作,它也可以工作。

+0

)。 – the0ther

+0

@theOther不,可以根據jQuery的doc設置:「如果瀏覽器可以創建一個XMLHttpRequest對象並且該XMLHttpRequest對象具有withCredentials屬性,則cors等於true。要在不支持的環境中啓用跨域請求cors,但確實允許跨域XHR請求(Windows小工具等),請設置$ .support.cors = true ;. CORS WD「,http://api.jquery.com/jQuery.support/ – seeg

0

這在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>