php генерирует массив json, а затем отображает его на javascript



я работаю с JSON для отправки данных на мой сервер и с него, но обычно я работаю с отправкой по одному данным за раз, теперь я хочу:
извлеките все строки из таблицы (базы данных mysql) - >php поместил их в массив JSON + обратный вызов ---> javascript повторно извлекает их и отображает, просматривая данные.

Вот мой javascript(jQuery):

$.getJSON(domain_path + 'generate.php?table=' +  tbname + '&callback=?', function(data) {
});

Как вы можете видеть, у этого есть таблица= имя таблицы. который предназначен для php, чтобы знать, из какой таблицы извлекать данные от.

Но для части php я не уверен, что использовать для создания массива JSONP.

<?php
//connects to database
  include 'connect.php';

$tbname = mysql_real_escape_string($_GET['table']);
$callback = $_GET['callback'];

//some mysql commands
//after mysql commands
//i would use this to output data but this is only for one line of data.

    $output = array('error'=>'0');
    $out_string =  json_encode($output);
    echo $callback.'('.$out_string.');';    

?>

Структура таблицы Mysql:
Имя таблицы: пользователи
имя, ссылка, электронная почта

Как я могу получить все строки из таблицы пользователей, которые содержат их имя, ссылку и адрес электронной почты, и вывести их в массив JSON.
И как бы я отобразил его с помощью javascript(jquery)? Используется ли функция for в javascript

Author: sm21guy, 2012-04-03

2 answers

Распечатайте массив JSON на PHP:

$query = mysql_query("SELECT * FROM ".$tbname."");
$rows = array();
while($r = mysql_fetch_assoc($query)) {
   $rows[] = $r;
}
print json_encode($rows);

Перехват и зацикливание результата в jQuery:

    $.getJSON(domain_path + 'generate.php?table=' +  tbname + '&callback=?', function(data) {
         $.each(data, function() {
           $.each(this, function(k, v) {
           /// do stuff
           });
         });
    });

Сначала каждый цикл проходит по вашим строкам/объектам; второй цикл проходит по вашим атрибутам/столбцам.

 4
Author: Nathan Q, 2012-04-03 09:00:06

Вы подходите с использованием именованного обратного вызова, все неправильно, функция обратного вызова уже предоставлена jQuery - обратите внимание, что вы передали пустую функцию в качестве последнего аргумента getJSON()? Что ж, это твой обратный звонок.

Вы хотите сделать что-то вроде этого:

PHP:

<?php

  //connects to database
  include 'connect.php';

  // mysql_real_escape_string() doesn't help, we need to do something like this:
  if (strpos($_GET['table'], '`') !== FALSE) {
    header('HTTP/1.1 400 Bad Request');
    exit;
  }

  // Build/make the query
  $query = "SELECT * FROM `{$_GET['table']}`";
  if (!$result = mysql_query($query)) {
    header('HTTP/1.1 500 Internal Server Error');
    exit;
  }

  // Fetch the returned data into an array of objects:
  $data = array();
  while ($row = mysql_fetch_assoc($result)) {
    $data[] = (object) $row;
  }

  // Send the final data back as JSON
  exit(json_encode($output));

Javascript:

$.getJSON(domain_path + 'generate.php?table=' +  tbname, function(data, status, xhr) {
  // First check the response is a success:
  if (xhr.status != 200) {
    console.log('Server responded with error code '+xhr.status);
    return;
  }
  // Now iterate over the data:
  $.each(data, function(key, item) {
    // Do something with the data here, for example:
    console.log('Name: '+item.name+', Link: '+item.link+', Email: '+item.email);
  });      
});
 0
Author: DaveRandom, 2012-04-03 08:43:28