php生成json数组然后javascript显示出来

Posted

技术标签:

【中文标题】php生成json数组然后javascript显示出来【英文标题】:php generate json array then javascript display it out 【发布时间】:2012-04-16 20:56:22 【问题描述】:

我正在使用 JSON 向我的服务器发送数据和从我的服务器发送数据,但通常我一次发送一个数据,现在我想: 从表中检索所有行(mysql 数据库)-> php 将其放入 JSON 数组 + 回调中 ---> javascript 将其检索并通过循环数据显示出来。

这是我的 javascript(jQuery):

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

如您所见,这有 table= 表名。这是为了让 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) 显示它? 是不是在javascript中使用for函数

【问题讨论】:

您确定要输出 JSON P 吗?从您的 Javascript 调用看来,您需要常规的 JSON。 mysql_real_escape_string() 对于转义对象名称(如表或列名称)是无用的。如果你在查询中用反引号` 引用它,如果strpos($_GET['table'], '`') !== FALSE 则出错,那么你应该是相当安全的。 【参考方案1】:

在 PHP 中打印出 JSON 数组:

$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
           );
         );
    );

首先,每个循环都会遍历您的行/对象;第二个循环遍历您的属性/列。

【讨论】:

@sm21guy 错误,已编辑。对于 function(k , v),请查看文档:api.jquery.com/jQuery.each 我的意思是在 jquery 中循环数据以显示它。【参考方案2】:

您使用命名回调的方法都是错误的,回调功能已经由 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);
  );      
);

【讨论】:

是的。 Javascript 和 PHP 都是独立于平台的。某些浏览器提供了非标准的 Javascript,某些 PHP 函数在某些操作系统上不起作用,但以上代码都没有使用任何会给您带来问题的东西。 谢谢,刚刚试用了代码,但我得到了一个null 来获取 php 脚本的结果。 如果你print_r($data);,你会得到什么?关于 X-Domain - 不,它不起作用,但我更喜欢使用 cURL 等在服务器端进行操作……你可以使用这个选项吗?

以上是关于php生成json数组然后javascript显示出来的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript打印JSON对象 - 树形结构输出 - 格式化JSON数组 - JS从一维数组 生成树形结构对象

JavaScript打印JSON对象 - 树形结构输出 - 格式化JSON数组 - JS从一维数组 生成树形结构对象

golang生成JSON及解析JSON

如何在 Postgresql 中获取数组的 JavaScript/JSON 数组?

查询数组 javascript

MySQL 数据从 PHP 到带有 JSON 的 Javascript