为什么IE 10拒绝通过jQuery $.ajax发送POST数据

前端之家收集整理的这篇文章主要介绍了为什么IE 10拒绝通过jQuery $.ajax发送POST数据前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在我的开发和生产环境中,IE 10都拒绝通过简单的$ .ajax调用发送任何POST数据。

我的脚本如下所示:

d = 'testvar=something';
$.ajax({
    data: d,success: function(h){
        console.log(h);
    }
});

实际的ajax请求正在经历,但没有发布数据?

请求标头看起来很正常:

Request POST /steps/~do HTTP/1.1
Accept  */*
Content-Type    application/x-www-form-urlencoded; charset=UTF-8
X-Requested-With    XMLHttpRequest
Referer http://localhost:8080/steps/
Accept-Language en-GB,en-AU;q=0.7,en;q=0.3
Accept-Encoding gzip,deflate
User-Agent  Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0)
Host    localhost:8080
Content-Length  0
DNT 1
Connection  Keep-Alive
Cache-Control   no-cache

但是请求体是空的! (我在他们的F12开发板中使用IE的网络标签捕获请求)。在PHP脚本中,print_r($ _ POST);返回一个空数组。

这在IE 7 – 9,chrome,FF和safari中工作正常,但IE10中断

我不知道我是否错过了某些东西,或者如果IE 10只是越野车?

编辑

我设置了全局ajax设置如下:

$.ajaxSetup({
    url: ROOT+'~do',// ROOT is either http://localhost/.../~do or http(s)://www.steps.org.au/~do depending on production or development environment
    type: 'POST'
});

进一步编辑

在Windows 8 Pro 64位上使用IE版本10.0.9200.16384

直接复制/粘贴请求标头是:

Key Value
Accept  */*
Accept-Encoding gzip,deflate
Accept-Language en-GB,en;q=0.3
Cache-Control   no-cache
Connection  Keep-Alive
Content-Length  0
Content-Type    application/x-www-form-urlencoded; charset=UTF-8
Cookie  __utma=91949528.1947702769.1348201656.1353212510.1353237955.6; __utmz=91949528.1348201656.1.1.utmcsr=localhost|utmccn=(referral)|utmcmd=referral|utmcct=/coconutoil.org.au/; __utmb=91949528.2.10.1353237955; __utmc=91949528; cartID=8b3b2b9187cfb1aeabd071d6ec86bbbb; PHPSESSID=bl57l7fp0h37au7g0em7i3uv13
DNT 1
Host    www.steps.org.au
Referer https://www.steps.org.au/
Request POST /~do HTTP/1.1
User-Agent  Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0)
X-Requested-With    XMLHttpRequest

请求体是emtpy。

反应标题

Key Value
Response    HTTP/1.1 200 OK
Server  Nginx/0.7.65
Date    Sun,18 Nov 2012 11:23:35 GMT
Content-Type    text/html
Transfer-Encoding   chunked
Connection  close
X-Powered-By    PHP/5.3.5-1ubuntu7.2ppa1~lucid
Expires Thu,19 Nov 1981 08:52:00 GMT
Cache-Control   no-store,no-cache,must-revalidate,post-check=0,pre-check=0
Pragma  no-cache

引发剂

Property    Value
Stage   Document Processing
Element XMLHttpRequest
Action  Processing
Document ID 0
Frame ID    0
Frame URL   https://www.steps.org.au/Shop/Health-Products/

复制问题的页面(整个网站实际上):

Steps to Life Shop,Health Products

解决方法

编辑

Still there is no fix from Microsoft for this except using

<Meta http-equiv="x-ua-compatible" content="IE=9" >

by add the above Meta tag,IE10 will run your javascript in IE9
compatible mode.

老回答

我发布我做的测试的示例代码,您还可以为代码使用相同的代码

<html>
<head runat="server">
    <script src="../Scripts/jquery-1.8.3.js"></script>
<script type="text/javascript">
    var xmlHttp = null;
    var XMLHTTPREQUEST_MS_PROGIDS = new Array(
      "Msxml2.XMLHTTP.7.0","Msxml2.XMLHTTP.6.0","Msxml2.XMLHTTP.5.0","Msxml2.XMLHTTP.4.0","MSXML2.XMLHTTP.3.0","MSXML2.XMLHTTP","Microsoft.XMLHTTP"
    );

    function makePOSTRequest(url,parameters) {

        if (window.XMLHttpRequest != null) {
            //xmlHttp = new window.XMLHttpRequest();
            xmlHttp = new ActiveXObject('Microsoft.XMLHTTP');
        } else if (window.ActiveXObject != null) {
            // Must be IE,find the right ActiveXObject.
            var success = false;
            for (var i = 0; i < XMLHTTPREQUEST_MS_PROGIDS.length && !success; i++) {
                alert(XMLHTTPREQUEST_MS_PROGIDS[i])
                try {
                    xmlHttp = new ActiveXObject(XMLHTTPREQUEST_MS_PROGIDS[i]);
                    success = true;
                } catch (ex) { }
            }
        } else {
            alert("Your browser does not support AJAX.");
            return xmlHttp;
        }
        xmlHttp.onreadystatechange = alertContents;
        xmlHttp.open('POST',url,true);
        xmlHttp.setRequestHeader('Content-type','application/x-www-form-urlencoded; charset=UTF-8');
        //xmlHttp.setRequestHeader('Content-type','application/json;');
        xmlHttp.setRequestHeader('Content-Length',parameters.length);
        xmlHttp.setRequestHeader('Accept','text/html,application/xhtml+xml')
        //xmlHttp.setRequestHeader('Connection',"close");
        xmlHttp.send(parameters);
    }

    function alertContents() {
        // alert( this.status );
        if (xmlHttp.readyState == 4) {
            //alert( this.responseText );
            if (xmlHttp.status == 200) {
                var result = xmlHttp.responseText;
                //  document.getElementById('result').innerHTML = result;
                //  document.getElementById('submitbutton').disabled = false;
                alert(result);
            } else {
                //alert( this.getAllResponseHeaders() );
                alert("There was a problem with the request.");
            }
        }
    }
</script>
</head>
<body>
<a href="javascript:makePOSTRequest('/api/jobs/GetSearchResult','jtStartIndex=0&jtPageSize=10&jtSorting=jobDescription ASC&jobDescription=')">Click me please</a>
    GetJobDetail

    <br/><br/>
    Url: <input type="text" id="url" value="/api/jobs/GetSearchResult"/><br/>
    parameters: <input type="text" id="parameters" value="jtStartIndex=0&jtPageSize=10&jtSorting=jobDescription ASC&jobDescription="/><br/>
    submit : <input type="button" id="callMethod" value = "call" onclick="javascript: makePOSTRequest($('#url').val(),$('#parameters').val())"/>
</body>
</html>

猜你在找的jQuery相关文章