IE8和9中Jquery Forms Plugin的jqXHR响应不正确

时间:2013-09-11 06:04:12

标签: jquery html ajax internet-explorer jqxhr

我有一个不寻常的问题,我只能在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发送。 (由this 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-but-ie-receives

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:0)

我(想想我)经过几次尝试后终于弄明白了这里发生了什么。

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

  • 为了安全起见,我让我的应用程序将所有X-Frame-Options标头设置为拒绝。我将此更改为SAMEORIGIN以获取我的AJAX响应脚本(仅限)。 This link 帮助我解决了这个问题。
  • IE似乎进入Quirks模式(而不是标准模式),除了“Content-type:text / html; charset = utf-8”之外的所有Content-Type标题,用于XML响应,这似乎打破了IE8特别是。这打破了JQuery的

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

  1. 标题(“X-Frame-Options:SAMEORIGIN”);
  2. header(“Content-type:text / html; charset = utf-8”);
  3. 希望这有助于某人!