【问题标题】:Cross-domain POST request ajax in internet explorerInternet Explorer 中的跨域 POST 请求 ajax
【发布时间】: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'));

【问题讨论】:

标签: jquery ajax internet-explorer post cross-domain


【解决方案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>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-09-10
        • 2012-04-15
        • 1970-01-01
        • 2015-01-28
        • 1970-01-01
        • 1970-01-01
        • 2019-08-08
        • 1970-01-01
        相关资源
        最近更新 更多