jquery.ajax()POST在Nginx / PHP-FPM上使用IE10接收空响应,但适用于Apache

时间:2013-04-25 13:48:24

标签: apache jquery character-encoding nginx internet-explorer-10

我使用非常简单的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 上工作正常,但在运行于的服务器B 上失败Nginx + PHP-FPM:如果我调试服务器BI上的success处理程序,请为undefined获取data。在IE开发人员工具的“网络”选项卡中,我可以看到完整的响应和所有标题。它可能会影响其他IE版本,但到目前为止我只能测试IE10。

以下是两个响应标题:

服务器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

在这两种情况下,身体部位看起来都一样。

知道什么可能导致这个问题吗?

1 个答案:

答案 0 :(得分:3)

请同时检查Content-Type标头,因为Apache和Nginx正在发送不同的值:

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

VS

Content-Type: text/html; charset=utf8

更新您的Nginx配置,添加以下行:

charset UTF-8;