【问题标题】:How to pass JSON response in PHP to Javascript如何将 PHP 中的 JSON 响应传递给 Javascript
【发布时间】:2021-02-22 06:41:27
【问题描述】:

我在将 JSON 请求从 PHP 传递到 Javascript 时遇到问题。我正在向我的 Flask RESTful API 发送一个请求,并且我正在收到一个 JSON 响应(我相信)。 PHP:

$urlContents = file_get_contents("http://192.168.2.201:5000/dataprovider", false, $context);
$travelArray = json_decode($urlContents);

我的对象如下所示:

stdClass Object
(
    [1] => stdClass Object
        (
            [var1] => 
            [var2] => 
            [var3] => 763
            [var4] => 6:22:30
            [var5] => München
            [var6] => 58
            [var7] => Bremen
            [var8] => 239
        )

    [2] => stdClass Object
        (
            [var1] => 
            [var2] => 
            [var3] => 145
            [var4] => 3:12:23
            [var5] => München
            [var6] => 583
            [var7] => Bremen
            [var8] => 9
        )
)

JavaScript

<script type="text/javascript">
            var response = JSON.parse('<?php echo $travelArray; ?>');
            if (response != null) {
                console.log(response);
            } else {
                console.log("test");
            }
        
</script>

当我按 F12 并查看 sources 时,它会显示:

var response = JSON.parse('<br />
<b>Recoverable fatal error</b>:  Object of class stdClass could not be converted to string in <b>/var/www/html/greenTravelWizard.php</b> on line <b>83</b><br />

我尝试了几种方法,例如在 JavaScript 部分使用 $urlContents 而不是 $travelArray([1]:https://i.stack.imgur.com/Tujy3.png),但我还没有弄清楚如何正确地将 JSON 传递为正确的 JavaScript 格式。

当我还没有通过表单发送请求时,我得到了


注意:未定义变量:/var/www/html/greenTravelWizard.php 中的上下文在 83

警告:file_get_contents(192.168.2.201:5000/dataprovider):打开流失败:HTTP 请求失败! HTTP/1.0 405 方法不允许在 /var/www/html/greenTravelWizard.php83

【问题讨论】:

  • 除了decode这个bug,不推荐在javascript代码中生成PHP。更标准的工作流程是将您的 php 文件保存为 data.php,然后使用 fetch("data.php") 在 javascript 中获取结果。
  • 试试这个:var response = JSON.parse('');
  • 如果你收到 JSON,并且想要传递给客户端 as JSON - 那你为什么要在服务器端 解码 JSON ?

标签: javascript php json stdclass


【解决方案1】:

除非在回显之前对其进行编码,否则不应对其进行解码

你可以这样做

var response = <?php echo $file_get_contents("http://192.168.2.201:5000/dataprovider", false, $context); ?>;

如果你写了代理,那么你只需要做

<?php
header("content-type: application/json"); 
echo file_get_contents("http://192.168.2.201:5000/dataprovider", false, $context);
?>

然后使用fetch 从您的服务器获取它

【讨论】:

  • 第一个选项效果很好!谢谢!但是,当我还没有通过表单发送请求时,您知道如何解决我收到的错误吗?
    注意:未定义变量:/var/www/html/greenTravelWizard.php 中的上下文 83
    警告:file_get_contents(192.168.2.201:5000/dataprovider):打开流失败:HTTP 请求失败! /var/www/html/greenTravelWizard.php 83
    行中的 HTTP/1.0 405 方法不允许
  • 也许他们期望的是 POST 而不是 GET
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-23
  • 1970-01-01
  • 2017-11-13
相关资源
最近更新 更多