【问题标题】:Return JSON data from PHP, and use it using Javascript从 PHP 返回 JSON 数据,并使用 Javascript 使用它
【发布时间】:2011-01-14 16:12:58
【问题描述】:

我使用过 JSON 数据,Jquery 的 getJSON 方法使用 PHP 的服务器端脚本来获取数据。现在我正在尝试使用 PHP 函数返回的 JSON 数据,而 Javascript 事件或 url 将获取该数据。对于访问 PHP 数据的 Javascript 函数,它必须有一个回调,我不知道应该如何创建回调。

我在 PHP 文件 (getData.php) 中的现有代码可以回显/返回 JSON 输出,并提供如下所示的数据

{"count":3,"items":[{"myTab_ID":"1","myTab_xam":"test1","myTab_rank":"21"},
{"myTab_ID":"2","myTab_xam":"test2","myTab_rank":"22"},
{"myTab_ID":"3","myTab_xam":"test3","myTab_rank":"22"}]}

现在我有了我的 javascript 文件,它可以进行调用,这有点像 twitter,

 <html>
    <head>
      <script type="text/javascript" src="http://myserver/getdata.php">
      </script>
   </head>
 </html>

现在当我运行这个 html 文件时,我得到一个错误提示

“错误:无效标签源文件: http://myserver/getData.php线路:1, 栏目:1 源代码: {"count":3,"items":[{"myTab_ID":"1","myTab_xam":"test1","myTab_rank":"21"},{"myTab_ID":"2","myTab_xam" :"test2","myTab_rank":"22"},{"myTab_ID":"3","myTab_xam":"test3","myTab_rank":"22"}]}"

在错误控制台中。

我很高兴我至少能够将数据从我的 php 端获取到 html 文件,但现在我想知道如何使用返回的 JSON 数据。我将如何开发返回 JSON 数据的回调函数??

> ------code in getData.php---------------
> 
> $con =
> mysql_connect("localhost","peter","abc123");
> if (!$con)   {   die('Could not
> connect: ' . mysql_error());   }
> 
> mysql_select_db("my_db", $con);
> 
> $result = mysql_query("SELECT * FROM
> Persons");
> 
> while($row =
> mysql_fetch_array($result))   {  
> $data[] = $row;   }
> 
> echo json_encode($data);
> 
> --------------end - getdata.php--------------
> 
> ---------code in getJson.html------------- html> <head>
> <script type="text/javascript"
> src="http://myserver/getdata.php">
> </script> </head>
> 
> </html>
> -----------------------end- getJson.html----------

我不确定回调如何获取数据?

【问题讨论】:

  • 将代码放入问题中时,只需将每行缩进 4 个空格。
  • @Pointy - 您也可以突出显示它并点击 {} 按钮

标签: php javascript web-services json callback


【解决方案1】:

不要忘记 getData.php 中的标题:

header('Content-type: application/json');

Some useful examples in the php manual

【讨论】:

  • 当我添加这个标题时,文件即将下载。加载页面后,我会收到下载 getData.php 文件的提示。这很奇怪吗?
  • 当你试图通过浏览器查看输出时?有多种方法可以让浏览器解释 application/json - 例如。 adallow.wordpress.com/2008/10/13/…
【解决方案2】:

您收到该错误是因为 JSON 构造对于 JavaScript 解析器来说是完全错误的。在一个裸露的大括号 ({) 之后,Javascript 需要一个语句。

您的代码似乎期望 JSON 简单地作为 &lt;script&gt; 包含在页面中,而是由 XMLHttpRequest 主动获取(即“ajax”) .这真的很常见,它与&lt;script&gt; 标签给你的完全不同。在这种情况下,JSON 构造由客户端代码显式解析,并用于任何需要的东西。

【讨论】:

  • 正确;照原样,您的 HTML 页面正在尝试将 JSON 作为 JavaScript 包含在内,但失败了。您需要通过 AJAX 调用将其分配给变量,或者 PHP 页面需要将其作为变量输出 (var myData = {...})。
  • 如何将输出分配为变量?我只返回 json_encode($data) 吗?还是我会在我的 php 中编写一些 javascript 并返回它??
  • 如果 PHP 代码用一些 Javascript 写出 JSON,那会很好,正如其他人所指出的那样。只需将 JSON 与 JavaScript 代码的 PHP 代码前缀用于声明变量,例如 var x = { json stuff here };
  • 假设 $data 包含 json 数据,所以我做一个 echo '';这是你建议的 Pointy 吗?
【解决方案3】:

如果您希望 json 编码的 $data 数组在 javascript 中可用,您可以这样做:

<?php $jencodeddata = json_encode($data); ?>

在您的 HTML 文件中..

<script type="text/javascript">
function doSOmething()
{    
var jsencodedata = '<?php print $jencodeddata ?>';
you can loop through jsencodedata here....
}
</script>

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 2012-03-01
    • 2017-04-20
    • 2015-06-04
    • 1970-01-01
    • 2012-10-30
    • 2011-07-05
    • 2020-08-24
    • 1970-01-01
    • 2017-02-08
    相关资源
    最近更新 更多