2012-05-01 2 views
3

Я использую jQuery 1.7.2 и хотел бы сделать запрос POST в другой домен. Это должен быть запрос POST. Но это не работает в Internet explorer (я пробовал IE9); он работает во всех других браузерах.Кросс-доменный запрос POST ajax в Internet explorer

У меня есть этот скрипт:

<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) запрос пост работает] (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

duplicate: http://stackoverflow.com/questions/13149122/jquery-ajax-cross- domain-form-submission-issues-with-ie – 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 заголовка Origin. Я понимаю, что просто «*» не будет работать, если будет предоставлено Origin.

Кроме того, IE8 и IE9 имеют ограниченную поддержку для этого, но он работает, если вы положили jQuery.support.cors = true, как вы это сделали.

+0

Насколько я знаю, 'jQuery.support.cors' доступен только для чтения, для обнаружения. – the0ther

+0

@theOther Нет, это может быть установлено в соответствии с документом jQuery: «cors равно true, если браузер может создать объект XMLHttpRequest, и если этот объект XMLHttpRequest имеет свойство withCredentials. Чтобы разрешить междоменные запросы в средах, которые не поддерживают cors еще, но разрешают кросс-доменные запросы XHR (гаджеты Windows и т. д.), устанавливают $ .support.cors = true ;. CORS WD ", http://api.jquery.com/jQuery.support/ – seeg

2

Для поддержки CORS в IE < 10, вы должны изменить метод ajax для использования объекта XDomainRequest. Этот плагин делает это для вас: https://github.com/jaubourg/ajaxHooks

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>