Неправильный ответ jqXHR для плагина Jquery Forms в IE8 и 9

У меня необычная проблема, которую я смог воспроизвести только в IE8 и 9 - я тестировал Safari, Chrome (на Mac, Firefox (на ПК) и 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, я получаю часть HTML страницы, которая содержится в элементе fileStore_newUpload. Например:

<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://stackru.com/questions/17473719/jquery-form-plugin-the-server-generates-correct-json-response-but-ie-receives

Любая помощь будет оценена.

1 ответ

Решение

Я (кажется, я) наконец-то понял, что здесь происходит - после нескольких попыток.

Две вещи, возможно, способствовали этой проблеме в Internet Explorer 8 и 9:

  • В целях безопасности мое приложение установило запрет всех заголовков X-Frame-Options. Я изменил это на SAMEORIGIN для моих сценариев ответа AJAX (только). Эта ссылка очень помогла в разработке этого.
  • Похоже, что IE перешел в режим Quirks (в отличие от режима Standards) для всех заголовков Content-Type, кроме "Content-type: text/html; charset=utf-8" для ответов XML, что, по-видимому, нарушало IE8. Это ломает JQuery

Две строки PHP, которые я использовал, чтобы исправить это, были:

  1. заголовок ("X-Frame-Options: SAMEORIGIN");
  2. заголовок ("Content-type: text/html; charset=utf-8");

Надеюсь, это поможет кому-то!

Другие вопросы по тегам