Нужно работать с полученными данными как с объектом или массивом, но не могу.
Нужно парсить ответ в responseText
от сервера, но у меня не получается.
Покажите, где я сделал ошибку?!
jQuery не учил, поэтому ответы дайте на чистом JavaScript.
index.php:
<?php
require 'rb.php';
R::setup( 'mysql:host=127.0.0.1;dbname=test111','root', '' );
?>
<!DOCTYPE html>
<html lang="en">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8 without BOM" >
<head>
<script type="text/javascript">
function getXmlHttp() {
var xmlhttp;
try {
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (E) {
xmlhttp = false;
}
}
if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
xmlhttp = new XMLHttpRequest();
}
return xmlhttp;
}
function summa() {
var jsnReq = {
"authorid": document.getElementById("a").value
}
var data = JSON.stringify( jsnReq );
var httpReq = getXmlHttp();
httpReq.open('POST', 'load.php', true); // Открываем асинхронное соединение
httpReq.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); // Отправляем кодировку
httpReq.send('id=' + data); // Отправляем POST-запрос
httpReq.onreadystatechange = function() { // Ждём ответа от сервера
if (httpReq.readyState == 4) { // Ответ пришёл
if(httpReq.status == 200) { // Сервер вернул код 200
var baad = httpReq.responseText;
data = JSON.parse(baad);// парсим полученую строку
document.getElementById('xmls').innerHTML = data; // i nihrena ne rabotaet sukabliat'
}
}
};
}
</script>
<div>
<fieldset name="set"> <legend>Выбираем автора!</legend>
<select id="a" name="author" size="1" onchange="summa()">
<option>--</option>
<?php
$resulta = R::findAll('author', 'ORDER BY id');
foreach ($resulta as $result) {
echo '<option value='.$result->id.'>'.$result->author_name.'</option>';
}
?>
</select><br>
</fieldset>
<fieldset name="set"> <legend>Выбираем какие книги он написал!</legend>
<select id="b" name="book" size="1" >
<option>--</option>
</select>
<div id="summa"></div>
</fieldset>
<fieldset name="set"> <legend>Описание книги!</legend>
<div id="xmls"></div>
<div id="xml"></div>
</fieldset>
</div>
</body>
</html>
load.php
<?php
require 'rb.php';
R::setup( 'mysql:host=127.0.0.1;dbname=test111','root', '' );
$data = $_POST;
$decode = json_decode($data['id']);
$resulta = R::load('author',1/*$decode->authorid*/);
$resultb = $resulta->sharedBook;
//$resultBook = array ( //заполняем массив
// 'authId'=>'"'.$resulta->id.'"',
// 'authorName'=>'"'.$resulta->author_name.'"',
//);
foreach ($resultb as $result) {
$resultBook[] = array ( 'book' => array ( //заполняем массив в массиве (двумерный массив)
'bookId'=>'"'.$result->id.'"',
'bookName'=>'"'.$result->book_name.'"',
)
);
}
echo json_encode($resultBook);
?>
а это результат в responseText
.
[{"book":{"bookId":"\"1\"","bookName":"\"\u0425\u043e\u043b\u043e\u0434\u043d\u043e\u0435 \u043c\u043e\u043b\u043e\u043a\u043e\""}},{"book":{"bookId":"\"2\"","bookName":"\"\u0411\u0438\u0442\u0432\u0430 \u0431\u043e\u0431\u0440\u043e\u0432\""}},{"book":{"bookId":"\"3\"","bookName":"\"\u0418\u0441\u0442\u043e\u0440\u0438\u044f \u0448\u0438\u0431\u0430\u043d\u0443\u0442\u043e\u0433\u043e \u043c\u043e\u043b\u043d\u0438\u0435\u0439 \u043f\u0440\u0438\u0448\u0435\u043b\u044c\u0446\u0430\""}},{"book":{"bookId":"\"4\"","bookName":"\"\u0421\u0445\u0435\u043c\u0430 \u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u043e\u043a\u043e\u044f\""}},{"book":{"bookId":"\"5\"","bookName":"\"\u0425\u0438\u0442\u0440\u044b\u0439 \u0432\u043e\u043b\u043a\""}},{"book":{"bookId":"\"6\"","bookName":"\"\u0420\u044b\u0431\u0430 \u0442\u043e\u0436\u0435 \u0447\u0435\u043b\u043e\u0432\u0435\u043a\""}}]
Спасибо за внимание.
var dataStr = '[{"book":{"bookId":"1","bookName":"\u0425\u043e\u043b\u043e\u0434\u043d\u043e\u0435 \u043c\u043e\u043b\u043e\u043a\u043e"}}]';
var data = JSON.parse(dataStr);
console.log(data);
Вам надо убрать из данных, формируемых на сервере, лишние двойные кавычки. Попробуйте:
'bookId'=>$result->id,
'bookName'=>$result->book_name,
Update
var data = JSON.parse(baad);
for(var i = 0; i < data.length; i++) {
var item = data[i];
if (item.book) {
var bookElement = document.createElement("option");
bookElement.setAttribute("value", item.book.bookId);
bookElement.innerText = item.book.bookName;
document.getElementById('b').appendChild(bookElement);
}
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Написан парсерПри вносе в базу данных чем больше она становится тем медленнее грузится
Пишу биржу телеграм, столкнулся с такой проблемой: для некоторых действий на сайте нужно сначала войти в системуКак сделать, чтобы при переходе...