【问题标题】:Returning value from restAPI in php, echo value not showing从 php 中的 rest API 返回值,回显值未显示
【发布时间】:2021-02-16 23:36:41
【问题描述】:

我正在尝试使用 PHP 从我的 API 返回一个值,可以在此处找到 api:

代码如下:

我没有在我的页面上看到回声,没有看到任何错误,我相信我正确读取了 json。任何帮助表示赞赏!

        <?php

        $titleid = 2;
        $url = "http://kmoffett07.lampt.eeecs.qub.ac.uk/serverSide/buildapi.php?id={$titleid}";
        $response = file_get_contents($url);



        $returnvalue = json_decode($response, true);

        echo $returnvalue["Age"];

        ?>

        

【问题讨论】:

  • 据我所见,服务器端响应似乎不是有效的 json。是否可以在服务器端解决这个问题?
  • 你能解释一下你的意思吗?为无知道歉
  • 嗨凯尔,解释没问题!如果有帮助,我在下面的答案中添加了一些解释!基本上,服务器输出似乎在 json 数据前面添加了一行文本。如果您知道如何删除服务器 buildapi.php 文件上多余的“已连接到 db”文本,它应该有助于保持 json 数据有效。

标签: php html json api


【解决方案1】:

据我所知,json 在服务器端无效(由于{} 部分前面的“连接到数据库”文本)。如果可能的话,我认为修复服务器端响应 json 数据是个好主意!

目前,这里有一种方法可以获取您想要检索的值:

<?php
    $titleid = 2;
    $url = "http://kmoffett07.lampt.eeecs.qub.ac.uk/serverSide/buildapi.php?id={$titleid}";
    $response = file_get_contents($url);
    $adjusted_response = str_replace('connected to db', '', $response);
    $returnvalue = json_decode($adjusted_response, true);
    echo $returnvalue['tv_shows']['Age'];
?>

输出:

$ php example.php
16+

如果服务器端的 json 数据是固定的,我想你可以把代码缩短成这样:

<?php
    $titleid = 2;
    $url = "http://kmoffett07.lampt.eeecs.qub.ac.uk/serverSide/buildapi.php?id={$titleid}";
    $response = file_get_contents($url);
    $returnvalue = json_decode($response, true);
    echo $returnvalue['tv_shows']['Age'];
?>

【讨论】:

  • 您能解释一下服务器端 json 无效是什么意思吗?为无知道歉!您的方法确实返回了值,adjusted_response 到底在做什么?
  • 在您的buildapi.php 文件的输出中,响应前面的文本显示为“已连接到数据库”。如果您有机会更改 buildapi.php 文件,以便不会将额外的“连接到 db”文本打印到输出中,则 json 数据应该是有效的。在我的示例中,$adjusted_response 正在从响应中删除额外的“连接到数据库”文本。但这可能不是处理问题的理想方法。如果您将服务器文件更改为不包含第一部分的回显或打印类型的语句,我答案末尾的示例代码应该可以工作。
  • 感谢您的解释,在我用来构建我的 api 的文件中,我包含了我为连接到数据库而创建的 connection.php 文件,其中包含一个回显“连接到 db”。刚刚删除了那个回声,它现在可以正常工作了。感谢您的帮助和解释,没有意识到它正在返回一个字符串。现在完全理解,而不是我的代码只是工作!感谢您的时间和帮助!
【解决方案2】:

问题是 $response 作为字符串返回,为了解决您需要编辑后端并使其在没有“连接到数据库”的情况下给出响应的问题

【讨论】:

  • 嗨@kylemoffett。如果这个或任何答案已经解决了您的问题,请通过单击复选标记考虑accepting it。这向更广泛的社区表明您已经找到了解决方案,并为回答者和您自己提供了一些声誉。没有义务这样做。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-27
  • 2014-04-08
  • 1970-01-01
相关资源
最近更新 更多