21

私の開発環境と運用環境の両方で、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-AU;q=0.7,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

リクエストの本文が空です。

応答ヘッダー:

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/

問題を再現するページ (実際にはサイト全体):

ライフショップへのステップ、健康製品

4

8 に答える 8

7

編集済み

使用する以外に、これに対するマイクロソフトからの修正はまだありません

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

上記のメタ タグを追加すると、IE10 は IE9 互換モードで JavaScript を実行します。

古い答え。

私が作成したテストのサンプル コードを投稿しています。コードに同じコードを利用することもできます。

<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>
于 2012-12-04T12:38:48.093 に答える
4

同じ問題があります。IE 10デスクトップ版のバグだと思います。Windows 8 pro 64bit で動作しています。xhr.send メソッドがデータを渡していないようです。他のすべてのブラウザー、つまり 10 のメトロ モード、またはデスクトップ モードで ie9 標準に変更した場合は正常に動作します。

于 2012-11-07T05:59:48.557 に答える
2

私も同じ問題に直面しました。以下の変更は私にとってはうまくいきました。

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

私のために働いた:)

于 2013-02-28T12:38:46.967 に答える
1

を設定しても解決できなかったこの同じ問題に直面しましたが、HTML5バリデーターではメタヘッダーが認識されないため、推奨される方法である<meta http-equiv="x-ua-compatible" content="IE=9">応答ヘッダーX-UA-Compatibleを設定することでこれを強制しました。IE9

J2EE アプリケーションの場合、これは次のフィルターで実現できます。

public class IECompatibilityFilter implements Filter {
    private String compatibilityMode = "IE=10";
    public IECompatibilityFilter() {
    }
    public String getCompatibilityMode() {
        return compatibilityMode;
    }
    public void setCompatibilityMode(String compatibilityMode) {
        this.compatibilityMode = compatibilityMode;
    }
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        String mode = filterConfig.getInitParameter("compatibilityMode");
        if (StringUtils.isNotBlank(mode)) {
            this.compatibilityMode = StringUtils.trim(mode);
        }
    }
    @Override
    public void doFilter(ServletRequest request,
                         ServletResponse response,
                         FilterChain chain)
            throws IOException, ServletException {
        if (!response.isCommitted() && response instanceof HttpServletResponse) {
            HttpServletResponse httpResponse = (HttpServletResponse) response;
            httpResponse.addHeader("X-UA-Compatible", compatibilityMode);
        }
        chain.doFilter(request, response);
    }
    @Override
    public void destroy() {
    }
}

そしてあなたのに登録しますweb.xml

<filter>
  <filter-name>ieCompatibilityFilter</filter-name>
  <filter-class>com.foobar.web.filter.IECompatibilityFilter</filter-class>
  <init-param>
    <param-name>compatibilityMode</param-name>
    <param-value>IE=9</param-value>
  </init-param>
</filter>
于 2013-06-07T00:58:58.747 に答える
0

似たようなことがあります (ブラウザから Amazon S3 への画像のアップロードに関する問題)、私の場合、https : //my. local.server.com:123/foo。xhr.open("POST", httpUrl, true) 呼び出しでクラッシュします。

これはおそらく IE10 のバグです (驚きです ;))。Win7 と Win8 の両方でクラッシュします。

于 2013-02-05T16:56:51.280 に答える
0

私はこれと同じ問題を抱えていましたが、単一のリクエストだけで、多くの ajax リクエストを処理する Web アプリがあることを意味します。マークアップをチェックしてください。レイアウト用のテーブル内にフォームがありました

<table>
    <form></form>
</table>

私はそれを別の方法で変更します。フォーム > テーブル。

于 2013-04-02T15:39:57.003 に答える
0

クロスドメインの httpsリクエストを行う Window 8 の問題があるようです。私のクロスドメインサーバー(開発サーバー)の証明書が無効であるため、証明書の有効性と関係があるかどうかを確認できません。

このリンクは回避策ですが、アプリケーション全体をブートストラップして IE10+ だけの GET リクエストを作成したい人はいますか? http://jonnyreeves.co.uk/2013/make-xhr-request-to-https-domains-with-winjs/

于 2015-10-30T04:47:05.830 に答える