Тип данных jQuery:

#php #jquery #xml

#php #jquery #xml

Вопрос:

У меня странная проблема, связанная с типом данных jQuery.

У меня есть очень простая PHP-программа, которая возвращает (echo) XML-файл (строку). Выглядит так:

 $xmlFile = "sampleXMLFile.xml";
$xml = simplexml_load_file($xmlFile);     
echo $xml->saveXML();
 

Мой клиентский / javascript-код вызывает php-программу через ajax:

 $(document).ready(function()
{
    $.ajax({
    type: "GET",
    url: "myPHPFile.php",   
    dataType: "xml",
    success: myCompleteFunction,
    complete: mySuccessFunction,
    failure: function(data) {
        alert("Problem getting XML");
        } });
});
 

«myCompleteFunction» принимает XML и просто записывает первый узел в элемент div, например:

 function myCompleteFunction(xml)
{
      $(xml).find("Row").each(function()
      {
        $("#result3").append($(this).attr("myrow"));
      });
}
 

ХОРОШО — в IE 8 это работает нормально. В Firefox и Chrome я не получаю никаких результатов. Однако, если я изменю тип данных на «html», я получу правильные результаты в Firefox и Chrome, а затем не получу результатов в IE. ‘

Продолжайте сходить с ума от этого. Мне действительно нужно вводить условную логику для браузеров?

Параметр DataType:, описанный в руководстве по jQuery, кажется достаточно понятным. Я даже пытался оставить тип данных

(согласно руководству: если не указано ни одного, jQuery попытается вывести его на основе MIME-типа ответа)

Я также пробовал несколько типов — например, «текстовый xml». Ничего хорошего.

Кто-нибудь когда-нибудь сталкивался с этой проблемой? Приветствуется любое направление.

Спасибо.

ps Я знаю, что могу прочитать XML-файл в jQuery. Результирующий XML из программы PHP будет значительно более сложным. Я использовал это только в качестве примера.


Обновлено:

Ну, я видел комментарий Фила о создании чего-либо перед отправкой XML-данных. Конечно, не было ничего очевидного. Я удалил пустую строку над моей первой <?php строкой. Это каким-то образом сработало! Мне все еще кажется странным. Итак, мой новый, более жесткий PHP-код теперь:

 <?php
// Load XML   
$xmlFile = "sample.xml";
$xml = simplexml_load_file($xmlFile);     
header('Content-type: text/xml'); 
echo $xml->saveXML(); 
?>
 

Я также обращу внимание на ваше другое предложение о правильной обработке обратных вызовов jQuery.ajax(). Спасибо.

Я очень ценю вашу помощь с этим!!

Ответ №1:

Придерживайтесь «xml» dataType и добавьте это в свой PHP-файл перед echo

 header('Content-type: text/xml');
 

Кроме того, вы, кажется, путаете некоторые jQuery.ajax() обратные вызовы.

  • Используется success для обработки возвращаемых данных.
  • Использовать error(jqXHR, textStatus, errorThrown) (не failure ) для обработки HTTP-ошибок
  • Используется complete для выполнения некоторых задач после success error выполнения обратных вызовов и

Комментарии:

1. Пробовал это без удачи <pre> $xmlFile = «sample.xml «; $xml = simplexml_load_file($xmlFile); заголовок(‘Content-type: text/xml’); echo $xml->saveXML(); </pre> Получить это и никаких результатов. Предупреждение: невозможно изменить информацию заголовка — заголовки, уже отправленные

2. @Rob В этом случае у вас есть что-то, создающее выходные данные до отправки XML-данных. Вы определенно этого не хотите. Кроме того, отредактируйте свой вопрос, чтобы добавить больше кода / сообщений. Не пытайтесь опубликовать это в комментариях

3. Ну, я видел комментарий Фила о создании чего-либо перед отправкой XML-данных. Конечно, не было ничего очевидного. Я удалил пустую строку над моей первой <?php строкой. Это каким-то образом сработало! Мне все еще кажется странным. Я также обращу внимание на ваше другое предложение о правильной обработке обратных вызовов jQuery.ajax(). Спасибо. Я очень ценю вашу помощь с этим!!