Как передать результат mysql как jSON через ajax

Я не уверен, как передать результат mysql-запроса на html-страницу через ajax JSON. ajax2.php

$statement = $pdo - > prepare("SELECT * FROM posts WHERE subid IN (:key2) AND Poscode=:postcode2"); $statement - > execute(array(':key2' => $key2, ':postcode2' => $postcode)); // $row = $statement->fetchAll(PDO::FETCH_ASSOC); while ($row = $statement - > fetch()) { echo $row['Name']; //How to show this in the html page? echo $row['PostUUID']; //How to show this in the html page? $row2[] = $row; } echo json_encode($row2); 

Как передать приведенный выше результат запроса для отображения на html-странице через ajax ниже?

мой аякс

 $("form").on("submit", function () { var data = { "action": "test" }; data = $(this).serialize() + "&" + $.param(data); $.ajax({ type: "POST", dataType: "json", url: "ajax2.php", //Relative or absolute path to response.php file data: data, success: function (data) { //how to retrieve the php mysql result here? console.log(data); // this shows nothing in console,I wonder why? } }); return false; }); 

Ваша json-кодировка должна быть такой:

  $json = array(); while( $row = $statement->fetch()) { array_push($json, array($row['Name'], $row['PostUUID'])); } header('Content-Type: application/json'); echo json_encode($json); 

И в вашей части javascript вам не нужно ничего делать, чтобы вернуть свои данные, он хранится в data var из функции успеха. Вы можете просто отобразить его и делать с ним все, что хотите на своей веб-странице.

В функции успеха ajax вы можете использовать JSON.parse (данные) для отображения данных JSON.

Вот пример:

Разбор JSON в JavaScript?

 header('Content-Type: application/json'); $row2 = array(); $result = array(); $statement = $pdo->prepare("SELECT * FROM posts WHERE subid IN (:key2) AND Poscode=:postcode2"); $statement->execute(array(':key2' => $key2,':postcode2'=>$postcode)); // $row = $statement->fetchAll(PDO::FETCH_ASSOC); while( $row = $statement->fetch()) { echo $row['Name'];//How to show this in the html page? echo $row['PostUUID'];//How to show this in the html page? $row2[]=$row; } if(!empty($row2)){ $result['type'] = "success"; $result['data'] = $row2; }else{ $result['type'] = "error"; $result['data'] = "No result found"; } echo json_encode($row2); 

и в вашем скрипте:

 $("form").on("submit",function() { var data = { "action": "test" }; data = $(this).serialize() + "&" + $.param(data); $.ajax({ type: "POST", dataType: "json", url: "ajax2.php", //Relative or absolute path to response.php file data: data, success: function(data) { console.log(data); if(data.type == "success"){ for(var i=0;i<data.data.length;i++){ //// and here you can get your values // var db_data = data.data[i]; console.log("name -- >" +db_data.Name ); console.log("name -- >" +db_data.PostUUID); } } if(data.type == "error"){ alert(data.data); } } }); return false; }); 

вы можете сохранить json закодированную строку в массив, а затем передать ее значение javascript.

См. Ниже код.

 <?php // your PHP code $jsonData = json_encode($row2); ?> 

Ваш код JavaScript

 var data = '<?php echo $jsonData; ?>'; 

Теперь переменная data имеет все данные JSON, теперь вы можете двигаться вперед с кодом, просто удалите строку ниже

  data = $(this).serialize() + "&" + $.param(data); 

он не нужен, поскольку переменная data является строкой.

И в вашем файле ajax2.php вы можете получить это через

 json_decode($_REQUEST['data']) 

Я бы просто ..

 $rows = $statement->fetchAll(FETCH_ASSOC); header("content-type: application/json"); echo json_encode($rows); 

затем со стороны JavaScript:

 xhr.addEventListener("readystatechange",function(ev){ //... var data=JSON.parse(xhr.responseText); var span=null; var i=0; for(;i<data.length;++i){span=document.createElement("span");span.textContent=data[i]["name"];div.appendChild(span);/*...*/} } 

(Не полагайтесь на веб-браузеры, анализируя его для вас в ответ. Из-за заголовка application / json, он отличается между браузерами … делайте это вручную с помощью responseText);