Это близко к типичным асинхронным темам / getJSON. Кажется, я не могу заставить мою работать … Я загружаю массив из базы данных mySQL в php-файл «loadblocks.php» и проверил его вывод на работоспособность, запустив страницу и выполнив эхо-код json_encode ($ содержание) ;. Все данные печатаются в браузере на 100% идеально. Однако, когда я вызываю данные json в Javascript … страница просто не отвечает, как только я щелкаю ссылку с моим событием onclick.
<?php
$con=mysqli_connect("localhost","root","password","swim");
// Check connection
if (mysqli_connect_errno()) {
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$result = mysqli_query($con,"SELECT * FROM blocks");
$content = array(); // initialize block viewer array
if($result){
while($row = mysqli_fetch_assoc($result)) {
$content[$row["id"]] = $row; // "id" is primary key id's
}
}
echo json_encode($content); // return array (validated)
mysqli_close($con);
?>
Затем в моем HTML-файле есть следующее: мне нужно загрузить этот многомерный массив «блочных» данных из базы данных mySQL. По сути, мне нужно сделать это при открытии html / javascript-страницы «Просмотрщик блоков» и прочитать все данные из переменной php «$ content» в буквальный «блок» для каждой строки в многомерном массиве. Каждая строка содержит своего рода требования к учебной программе, ссылку на фотографию и т. Д. И т. Д. Мой HTML / jscript выглядит следующим образом:
<html>
<head>
<script>
function loadblocks() {
$("#selectable").selectable({
disabled: true
}); // disable selectable while re-loading blocks in "selectable" viewer
$.getJSON('loadblocks.php', data, function(jsonarray) {
// store jsonarray once it is loaded in here
blockarray = jsonarray;
// in MySQL each row = (id, blocktype, title, description, imgurl, img2url, img3url, vidurl, goal1, goal2, goal3)
// Thus index #3 in each row is the "title" we will load in each box for now
// todo - create loop to load all rows
document.getElementById("selectable").innerHTML += "<li class='ui-state-default'>" + blockarray[0][3] + "</li>";
})
$(".selectable").selectable({disabled: false}); // re-enable
}
</script>
</head>
<body>
<table class="floatboxstyle" style="width:675px; height:225px;">
<tr>
<td>
<ol id="selectable">
<li class="ui-state-default">Sample block</li>
</ol>
</td>
</tr>
</table>
<button onclick="loadblocks()">Load Blocks</button>
<br>
<p id="feedback">
<span>You've selected:</span> <span id="select-result">none</span>
</p>
</body>
</html>
Вам не нужно использовать parseJSON
для ответа, jsonData
должен уже быть объектом JavaScript, на самом деле это, вероятно, должно быть ошибкой, хотя я обычно использую JSON.parse
так что я не уверен, если parseJSON
взрывается или нет. Я не вижу, что ты что-то делаешь с blockarray
в этом коде. И у вас нет обработчика ошибок, чтобы сообщить о проблемах, попробуйте добавить один.
[1] http://api.jquery.com/jQuery.getJSON/Обратному вызову успеха передаются возвращенные данные, которые обычно являются объектом или массивом JavaScript, как определено структурой JSON, и анализируются с помощью метода $ .parseJSON (). Также передается текстовый статус ответа. [1]
Кроме того, хотя вы можете видеть JSON-печать в браузере, это может быть недопустимый JSON, и в этом случае он будет молча работать.
Начиная с jQuery 1.4, если файл JSON содержит синтаксическую ошибку, запрос обычно завершается с ошибкой. По этой причине избегайте частого ручного редактирования данных JSON.
Попробуйте проверить свой JSON, чтобы убедиться, что он действительно действителен, хотя я бы предположил, json_encode
сделал бы это для вас.
Других решений пока нет …