Разбор XML-кода через PHP в jQuery - Ошибка XML

0

iam пытается обновить входящие сообщения ajax. У меня возникли проблемы с разбором xml для jquery. Я всегда получаю ошибку, что это не файл xml. Но его (думаю?) Правильно и не имеют ошибок кода в нем.

Выход XML:

<?xml version='1.0' ?>
<inboxdata>
 <convid>2</convid>
 <sender_id>1</sender_id>
 <reciever_id>2</reciever_id>
 <msg_count>4</msg_count>
 <last_txt_msg>Hello</last_txt_msg>
 <sender_read>1</sender_read>
 <sender_delete>0</sender_delete>
 <time>23.09.2013 - 19:38</time>
 <userpic>img/ava/1.png</userpic>
</inboxdata>
<inboxdata>
 <convid>4</convid>
 <sender_id>1</sender_id>
 <reciever_id>3</reciever_id>
 <msg_count>0</msg_count>
 <last_txt_msg>No msg</last_txt_msg>
 <sender_read>1</sender_read>
 <sender_delete>0</sender_delete>
 <time>23.09.2013 - 20:25</time>
 <userpic>img/ava/1.png</userpic>
</inboxdata>

PHP:

function show_inbox($mysqli)
{
    if(!isset($_SESSION)){
    sec_session_start();
    }
    $userid = $_SESSION['user_id'];
    $get_conversation = $mysqli->query("SELECT * FROM conversation WHERE sender_id =" . $userid);
    $xml_node = "";
    while ($row = mysqli_fetch_array($get_conversation)) {
            $xml_node     .= "<inboxdata>\n";
            $xml_node     .= "<convid>".$row['convid']."</convid>\n";
            $xml_node     .= "<sender_id>".$row['sender_id']."</sender_id>\n";
            $xml_node     .= "<reciever_id>".$row['reciever_id']."</reciever_id>\n";
            $xml_node     .= "<msg_count>".$row['msg_count']."</msg_count>\n";
            $xml_node     .= "<last_txt_msg>".$row['last_txt_msg']."</last_txt_msg>\n";
            $xml_node     .= "<sender_read>".$row['sender_read']."</sender_read>\n";
            $xml_node     .= "<sender_delete>".$row['sender_delete']."</sender_delete>\n";
            $xml_node     .= "<time>".$row['time']."</time>\n";
            $xml_node     .= "<userpic>img/ava/1.png</userpic>\n";
            $xml_node     .= "</inboxdata>\n";
    }
    $returnXML = "<?xml version='1.0' ?>\n".$xml_node;
    echo $returnXML;
}

Ява:

function show_inbox()
    {
        result = $.ajax({
        type: 'GET',
        async: false,   // WICHTIG! 
        url: 'functions_chat.php',
        data: ({
            a: "show_inbox"
        }),
       success: function(response){
           alert($(response).find('inboxdata').length);
          $(response).find('inboxdata').each(function(){

         var convid   = $(this).find('convid').text();
         $("ul#chatinbox").prepend("<li>"+convid+"</li");

         });
       }
    }).responseText;
    }

Если предупреждение из alert($(response).find('inboxdata').length); появляется, он всегда считается 0. Он должен считать 2?

Если я использую $.parseXML(response) я получу XML-ошибку: недопустимый XML... Но почему ее недействительно? Это кажется мне действительным!

Здесь проблема? Благодарю!

Теги:

1 ответ

1
Лучший ответ

Ваш XML недопустим, поскольку он не содержит корневой элемент (я использую имя "root" в примере ниже, но вы можете использовать любое имя):

<?xml version='1.0' ?>
<root>
  ... your actual content here
</root>

Вы можете проверить свой XML с помощью W3 Online Validator: http://validator.w3.org/check

  • 0
    это чертовски весело! ЛОЛ! Я думал, что <inboxdata> </ inboxdata> должно быть достаточно. Что ж, самое время изучить XML! Большое спасибо. Работает!
  • 0
    @ user2447291 Ключ в том, что должен быть ровно один самый внешний элемент, поэтому, если у вас есть цикл, он должен быть и вне цикла. :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню