0

我有一个不寻常的问题,我只能在 IE8 和 9 中复制 - 我已经测试了 Safari、Chrome(在 Mac 上、Firefox(在 PC 上)和 IE8、9 和 10 上)。

我有以下代码:

$('#fileStore_newUpload').ajaxForm({
        beforeSubmit: function(arr, $form, options){
            options.context = $form;
        },
        dataType:'xml',
        success: function(responseXML,status,jqXHR){
            alert(jqXHR.responseText);
            var xmlDoc = $.parseXML(jqXHR.responseText);
            $xml = $( xmlDoc );
            alert($xml.find("uploadSuccess").text());
            alert($(responseXML).find('uploadSuccess').text());
        }
    });

在除 IE8 和 9 之外的所有浏览器中,第一个 alert() 函数会产生以下预期响应。

<?xml version="1.0" encoding="utf-8" ?>
<files>
<file name="TPHP041879.pdf">
<uploadSuccess>1</uploadSuccess>
<filePath>/uploads/2013/09/TPHP0418798.pdf</filePath>
</file>
</files>

但是,在 IE8 和 9 中,我得到了一些包含在 fileStore_newUpload 元素中的页面的 HTML。例如:

<div id="admin_topBanner">
<span><a href="../index.php">Site Title</a></span>
....

使用 IE9 的调试工具,我可以看到网络请求的响应正文包含适当的内容,并且请求是通过 POST 发送的。(根据这篇文章进行了检查)。我还可以看到响应设置了“Content-Type application/xml; charset=utf-8”——我认为这对响应是正确的。

我的表格如下:

<form id="fileStore_newUpload" action="<?php echo $portalOptions['site_url']; ?>/ajax/fileUpload.php" enctype="multipart/form-data" method="POST">
                <label>File</label><br /><input type="file" name="fileDocument"><br />
                <button type="submit" form="fileStore_newUpload">Upload File</button>
            </form>

我认为这个问题可能是由于http://bugs.jquery.com/ticket/13388但我已经用 Jquery 1.9.0、1.9.1 和 1.10.2 进行了测试,发现所有版本都存在这个问题.

我认为这与此处提出的问题相同,但我不太确定:https ://stackoverflow.com/questions/17473719/jquery-form-plugin-the-server-generates-correct-json-response -但即收到

任何援助将不胜感激。

4

1 回答 1

0

我(想我)终于弄清楚了这里发生了什么——经过几次尝试。

在 Internet Explorer 8 和 9 中,有两件事可能导致了这个问题:

  • 为了安全起见,我让我的应用程序将所有 X-Frame-Options 标头设置为拒绝。我将其更改为 SAMEORIGIN 用于我的 AJAX 响应脚本(仅限)。这个链接极大地帮助了解决这个问题。
  • 对于 XML 响应的“Content-type: text/html; charset=utf-8”以外的所有 Content-Type 标头,IE 似乎都进入了 Quirks 模式(与标准模式相反),这似乎特别破坏了 IE8。这打破了 JQuery 的

我用来纠正这个问题的两行 PHP 是:

  1. header("X-Frame-Options: SAMEORIGIN");
  2. header("内容类型: text/html; charset=utf-8");

希望这对某人有帮助!

于 2013-09-19T22:34:45.837 回答