【问题标题】:Returning JSON from PHP to JavaScript?将 JSON 从 PHP 返回到 JavaScript?
【发布时间】:2010-10-15 11:58:54
【问题描述】:

我有一个通过 jQuery AJAX 调用的 PHP 脚本。我希望 PHP 脚本以 JSON 格式将数据返回给 javascript。这是 PHP 脚本中的伪代码:

$json = "{";
foreach($result as $addr)
{
    foreach($addr as $line)
    {
        $json .= $line . "\n";
    }
    $json .= "\n\n";
}
$json .= "}";

基本上,我需要将两个for循环的结果插入到$json中。

【问题讨论】:

    标签: php javascript json


    【解决方案1】:

    Php 有一个内置的 JSON 序列化函数。

    json_encode
    

    json_encode

    使用它,如果您可以并且不会遭受“此处未发明”综合症。

    【讨论】:

    • 太好了,谢谢。在发布到 SO 之前,我实际上已经查看了这个,但我认为它不会在我的主机上可用。
    • 这个“答案”并不完整,而且毫无用处。有关更完整的信息,请参阅 aesede 的答案。
    • @FunkDoc 在假设这是他们唯一的选择的情况下,有问题的 OP 正在手动将 JSON 串在一起。知道这不是他们唯一的选择是一个合适的解决方案。该 JSON 的最终结果将作为 HTTP 响应发出没有义务。 “添加标头”信息虽然对一种情况很有用,但如果您使用该 JSON 所做的操作不是简单地“将其逐字返回到网页”,则不会对您有所帮助。该问题没有对用例进行说明。
    • ( 此外,对于 AJAX 来说,设置标题并不是绝对必要的。如果我看起来很唐突,请道歉,但引号中“答案”这个词给出的阴影真的让我很伤心,它是 10几年前,让它死吧。我很久以前就离开 PHP 了,以至于我现在使用的语言离开了。)
    【解决方案2】:

    之前的答案中缺少以下几点:

    1. 在你的 PHP 中设置标题:

      header('Content-type: application/json');
      echo json_encode($array);
      
    2. json_encode() 可以返回 JavaScript array 而不是 JavaScript object,请参阅:
      Returning JSON from a PHP Script
      在某些情况下,了解这一点可能很重要,因为数组和对象并不相同。

    【讨论】:

    • 重要的是要注意数据是echoed而不是returned!当我第一次学习这个概念时,这让我很苦恼。因为在一般编程中,几乎所有内容通常都返回而不是“打印”。
    • 嘿@Juha,记住json_encode()(像所有函数一样)总是返回一些东西(包括NULL);你可以打印数据,处理它然后打印它,将它分配给一个变量供以后使用,将它保存到一个文件,等等......你可以在PHP: Returning values中阅读更多关于return的信息。您还可以(并且应该!)检查您不知道的每个函数返回什么,请参阅我们的示例 json_encode() 它声明 成功返回 JSON 编码字符串,失败返回 FALSE。
    • 那时,我想知道为什么return json_encode($jsonArray); 不起作用(AngularJS http.get 没有得到任何东西),直到我后来才注意到它:)
    【解决方案3】:

    PHP 的文档中有一个JSON section。不过你需要 PHP 5.2.0。

    从 PHP 5.2.0 开始,JSON 扩展默认捆绑并编译到 PHP 中。

    如果你不这样做,这里是你可以安装的PECL library

    <?php
        $arr = array ('a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5);
    
        echo json_encode($arr); // {"a":1,"b":2,"c":3,"d":4,"e":5}
    ?>
    

    【讨论】:

      【解决方案4】:

      通常你会对接收端的数据有一些结构感兴趣:

      json_encode($result)
      

      这也将保留数组键。

      请记住 json_encode 仅适用于 utf8 编码的数据。

      【讨论】:

        【解决方案5】:

        您可以使用Simple JSON for PHP。它发送标头帮助您伪造 JSON。

        看起来像:

        <?php
        // Include the json class
        include('includes/json.php');
        
        // Then create the PHP-Json Object to suits your needs
        
        // Set a variable ; var name = {}
        $Json = new json('var', 'name'); 
        // Fire a callback ; callback({});
        $Json = new json('callback', 'name'); 
        // Just send a raw JSON ; {}
        $Json = new json();
        
        // Build data
        $object = new stdClass();
        $object->test = 'OK';
        $arraytest = array('1','2','3');
        $jsonOnly = '{"Hello" : "darling"}';
        
        // Add some content
        $Json->add('width', '565px');
        $Json->add('You are logged IN');
        $Json->add('An_Object', $object);
        $Json->add("An_Array",$arraytest);
        $Json->add("A_Json",$jsonOnly);
        
        // Finally, send the JSON.
        
        $Json->send();
        ?>
        

        【讨论】:

        • 警告:PHP 的简单 JSON 已获得 GPLv2 许可,因此您自己的代码必须是开源的才能使用它。
        • 现在 MIT 许可证 :)
        • @JamieBirch 实际上,我认为您误解了 GPL 的工作原理。如果您在谈论 AGPL,那么您就会有所作为。但是大量的互联网是建立在 GPL 软件之上的,并且没有义务开源他们的代码,因为他们没有给用户任何他们控制的可执行文件,只是提供了一个接口。他们的唯一义务是必须向他们提供项目数字副本的任何人提供源代码。
        【解决方案6】:

        $msg="您输入了错误的用户名或密码"; $responso=json_encode($msg);

        echo "{\"status\" : \"400\", \"responce\" : \"603\", \"message\" : \"You Enter Wrong Username OR Password\", \"feed\":".str_replace("<p>","",$responso). "}";
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-11-01
          • 1970-01-01
          • 1970-01-01
          • 2014-01-17
          • 1970-01-01
          • 2012-04-02
          相关资源
          最近更新 更多