3

jquery.ajax()サーバーからいくつかの HTML スニペットを取得するために、非常に単純な呼び出しを使用します。

// Init add lines button
$('body').on('click', '.add-lines', function(e) {
    $.ajax({
        type        : 'POST',
        url         : $(this).attr('href')+'?ajax=1&addlines=1',
        data        : $('#quickorder').serialize(),
        success     : function(data,x,y) {
            $('#directorderform').replaceWith(data);
        },
        dataType    : 'html'
    });
    e.preventDefault();
});

PHP 側では、基本的に HTML 文字列をエコーアウトします。jQuery のバージョンは 1.8.3 です。

問題はIE10にあります: Apacheで実行されるサーバーAでは正常に動作しますが、Nginx + PHP-FPMで実行されるサーバーBでは失敗します:successサーバーBIでハンドラーをデバッグすると、undefinedfor data. IE 開発者ツールの [ネットワーク] タブで、完全な応答とすべてのヘッダーを確認できます。他の IE バージョンに影響する可能性がありますが、今のところ IE10 しかテストできませんでした。

2 つの応答ヘッダーを次に示します。

サーバー A、Apache (動作):

HTTP/1.1 200 OK
Date: Thu, 25 Apr 2013 13:28:08 GMT
Server: Apache
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
Vary: Accept-Encoding,User-Agent
Content-Encoding: gzip
Content-Length: 1268
Keep-Alive: timeout=2, max=100
Connection: Keep-Alive
Content-Type: text/html; charset=UTF-8

サーバー B、Nginx + PHP-FPM (失敗):

HTTP/1.1 200 OK
Server: nginx/1.1.19
Date: Thu, 25 Apr 2013 13:41:43 GMT
Content-Type: text/html; charset=utf8
Transfer-Encoding: chunked
Connection: keep-alive
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
Content-Encoding: gzip

どちらの場合もボディ部分は同じように見えます。

この問題の原因は何ですか?

4

1 に答える 1

4

Apache と Nginx は異なる値を送信しているため、Content-Type ヘッダーも確認してください。

Content-Type: text/html; charset=UTF-8

対。

Content-Type: text/html; charset=utf8

Nginx の設定を更新し、次の行を追加します。

charset UTF-8;
于 2013-04-26T09:16:01.173 に答える