Сообщение об ошибке Не удалось выполнить «appendChild» на «узле»: параметр 1 не имеет типа «узел»

Я пытаюсь заполнить свой мобильный список jquery с помощью ajax, чтобы получить список названий фильмов, выполнив запрос php Mysql с данными в json. Я успешно получил данные в правильном формате json, однако в моем javascript я получаю ошибку в строке.... li.appendChild("a")

HTML 
<div data-role = "main"  class = "ui-content">
         <ul data-role = "listview" id = "list" >
         </ul >
</div>
getcatagories2_mobile.php

<?php

include("includes/connection.php");

$q = "Comedy";

$resultActor = mysqli_query($con,"SELECT id,title, plot,catagory,release_date,rated FROM ".TBL_DATA." WHERE catagory LIKE '%".$q."%' ORDER BY title  ");    

$x= array();

    while($rowMovie = mysqli_fetch_array($resultActor)) {
        $x[]= array("Category" => $rowMovie['title']);

        }
       $jsonarray=json_encode($x);
       echo $jsonarray;

?>
successful sample JSON format output

[{"Category":"22 Jump Street"},{"Category":"27 Dresses"}]
my called javascript function using ajax...

var xhr = new XMLHttpRequest();

        xhr.open("GET", "getcatagories2_mobile.php", true); 

            xhr.onreadystatechange = function() 
            {
                if (xhr.readyState == 4 && xhr.status == 200) 
                {
                  var list = document.getElementById("list");
                  var data= xhr.responseText;
                  var vec= JSON.parse(data);
                        vec.forEach(
                              function(ob)
                              {
                                  var li = document.createElement("li");
                                  var a = document.createElement("a");
                                  var text = document.createTextNode("ob.Category");
                                  a.appendChild(text);
                                  a.setAttribute("href","#");
                                  li.appendChild("a");
                                  list.appendChild("li");

                              }
                         ); 
            $('#list').listview('refresh');  

            }
         }
                      xhr.send();


    };

когда я использовал отладку Google, я получаю свою ошибку в строке-> li.appendChild("a"), когда я нахожусь над var vec= JSON.parse(data), данные отображаются правильно.

то, что я пытаюсь достичь, - это просто выполнение моего jquery mobile как такового

<div data-role = "main"  class = "ui-content">
         <ul data-role = "listview" id = "list" >

            <li><a href = "#">22 Jump Street</a></li>
            <li><a href = "#">27 Dresses</a></li>

         </ul >
</div>

Вы пойдете намного быстрее, добавляя DOM вне цикла. Просто объедините элементы списка в виде текста, а затем сделайте что-то вроде $('#list').append(html).listview('refresh'); одним махом.

deblocker 21.05.2019 09:04

спасибо за ваш ответ, но я не понимаю «добавление к DOM вне цикла. Просто объедините элементы списка в виде текста». Я не эксперт :(

Nico 21.05.2019 17:11

не беспокойтесь... просто посмотрите здесь: stackoverflow.com/a/44964848/4845566 или здесь: stackoverflow.com/a/43915438/4845566

deblocker 21.05.2019 17:33

ок попробую разобраться, спасибо

Nico 21.05.2019 22:28
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
4
86
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы должны удалить кавычки из своих вызовов appendChild, иначе вы передадите строку этой функции, и она не знает, как с этим справиться. Без кавычек вы передаете объект-ссылку на функцию.

li.appendChild(a);
list.appendChild(li);

здорово, мне пришлось сделать так же, как вы предложили, чтобы удалить кавычки на "ob.Category". Теперь я получаю список, за исключением того, что я не получаю этот список стилей jquerymobile, есть ли что-то, что мне здесь не хватает?

Nico 21.05.2019 01:31

Да, вам не хватает знания о том, что все, что в кавычках, является строкой.

StackSlave 21.05.2019 01:36

мой список не похож на стиль Jquery mobile... как этот demos.jquerymobile.com/1.4.3/просмотр списка

Nico 21.05.2019 01:51

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