Неправильный ответ 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, которые я использовал, чтобы исправить это, были:
- заголовок ("X-Frame-Options: SAMEORIGIN");
- заголовок ("Content-type: text/html; charset=utf-8");
Надеюсь, это поможет кому-то!