Я пытаюсь заполнить свой мобильный список 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 вне цикла. Просто объедините элементы списка в виде текста». Я не эксперт :(
не беспокойтесь... просто посмотрите здесь: stackoverflow.com/a/44964848/4845566 или здесь: stackoverflow.com/a/43915438/4845566
ок попробую разобраться, спасибо



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы должны удалить кавычки из своих вызовов appendChild, иначе вы передадите строку этой функции, и она не знает, как с этим справиться. Без кавычек вы передаете объект-ссылку на функцию.
li.appendChild(a);
list.appendChild(li);
здорово, мне пришлось сделать так же, как вы предложили, чтобы удалить кавычки на "ob.Category". Теперь я получаю список, за исключением того, что я не получаю этот список стилей jquerymobile, есть ли что-то, что мне здесь не хватает?
Да, вам не хватает знания о том, что все, что в кавычках, является строкой.
мой список не похож на стиль Jquery mobile... как этот demos.jquerymobile.com/1.4.3/просмотр списка
Вы пойдете намного быстрее, добавляя DOM вне цикла. Просто объедините элементы списка в виде текста, а затем сделайте что-то вроде
$('#list').append(html).listview('refresh');одним махом.