Проблема синтаксического анализа вывода XML (PHP / JQuery) - PullRequest
1 голос
/ 18 ноября 2009

Я почесал голову в отчаянии, но не могу найти ответ. Я новичок в Ajax и пробую этот простой скрипт:

Вот мой код:

JAVASCRIPT:

$(document).ready(function(){    
    $("#toggle_album").click(function () {  
        $.post('backend/load_album_thumbnails.php', {  
            text: 'my string',  
                number: 23  
        }, function(xml) {  
                var timestamp = $(xml).find("time").text();
                alert(xml);
                alert(timestamp);
        });  
    });
});  

предупреждение (xml) возвращает:

     <? xml version="1.0"?>
<response status="ok">
<time>23:33:13</time>
<string>my string</string>
</response>

оповещение (отметка времени) возвращается пустым

Я также пробовал:

timestamp = $ ("time", xml) .text ();

с тем же результатом.

Я добавил дополнительное место в начальный тег xml, потому что он исчез здесь при стеке потока. Единственная причина этой ошибки, о которой я могу думать, состоит в том, что возвращаемые данные не в формате XML, но я не могу понять, почему это так.

Ценю любые ответы.

1 Ответ

1 голос
/ 18 ноября 2009

Вы правы, причина, по которой это не работает, заключается в том, что возвращаемые данные не в формате XML. Как правило, если веб-сервер не возвращает заголовок text/xml Content-Type, то определенные браузеры (и, следовательно, jQuery) не будут беспокоиться о синтаксическом анализе XML.

Чтобы заставить его работать, ваши варианты:

  1. Измените заголовки ваших ответов, указав формат XML, используя PHP * * * * * * * * * * * *, функцию , а затем измените свой ответ так, чтобы он использовал правильно сформированный XML. Код для этого будет выглядеть примерно так:

    header('Content-Type: text/xml; charset=UTF-8');
    echo "<?xml version=\"1.0\"?>
    <response status="ok">
      <time>$timestamp</time>
      <string>$mystring</string>
    </response>";
    
  2. Измените способ обработки ответа в своем коде JavaScript (например, напишите простой синтаксический анализатор регулярных выражений, хотя это считается вредным для вашего здоровья )

  3. Измените ваш ответ на что-то вроде JSON, чтобы вы могли использовать метод $.getJSON() jQuery для отправки запроса и анализа ответа на объект JavaScript ( В PHP есть несколько очень хороших встроенных Функции JSON ).
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...