php - 来自 PHP 的 Backbone JSON 请求问题

标签 php javascript json backbone.js

我在 stackoverflow 上的第一篇文章。 我正在开发一个包含客户端 javascript 和 backbone.js 以及 highcharts.js 的系统,以显示来 self 家中可再生能源系统的实时数据。

它使用一个称为 Arduino 的小型微 Controller 来处理低级别的传感器数据。 Controller 有自己的以太网硬件,我将其设置为小型服务器。

在我的客户端程序中,我使用 Backbone 作为 MVC,模型 URL 指向 Arduino 的 IP 以请求 json 数据包。效果很好。

我现在正在做的是将该 URL 指针移至我的托管网站,我在该网站上有一个小的 php 文件,用于从 SQL 表中提取数据并以相同的 json 格式呈现。

当我从我的浏览器中请求来自 Arduino Controller 的 json 数据包时,它看起来像这样;

<head></head><body><pre>{"vT_pv":234.00,"iT_pv":5.90,"iS_pv":0.00,"vB_pv":27.51}</pre></body>

当我将浏览器指向我调用 php 的托管站点时,它看起来像这样;

<head></head><body><pre>{"vT_pv":230.70,"iT_pv":4.90,"iS_pv":0.00,"vB_pv":27.56}</pre></body>

编辑:已按照 Alex 的要求包含完整标题

两者看起来相同,但在我的客户端 javascript 中,只有第一个真正起作用,因为数据已成功放入模型,然后可以在屏幕上查看。

两者之间的一个区别是,当我检查页面时,我的 Arduino 以 HTTP/1.0 返回,而从我的托管站点返回的 json 数据是 HTTP/1.1

这是否足以引起这样的问题?

下面是那个json的 Backbone 模型;

PollerModel = Backbone.Model.extend({
//  url:'//xxx.xxx.xxx.xxx/poller.json',    // this one works
    url: 'http://yyy.yyy.yyy.yyy.host_site/sql_get_live.php',    // this one does not

    startUpdate: function() {
        var that = this;
        startUpdate(that);
        function  startUpdate(isThis) {
            that.fetch({async:false});
            pollerUpdateInterval = setTimeout(function(){startUpdate(that);}, 5000);
        };
    },
});

如您所见,调用 startUpate 函数后,它将永远每 5 秒调用一次,这正是我想要的。

当我使用指向微 Controller 的第一个 URL 时,它就像一个魅力。 当我使用第二个 URL 时,我可以看到它发出请求并得到回复,但它似乎对数据没有做任何事情,它没有放入模型中。

所以在我的客户端应用程序中,我在第一个 URL 中看到了渲染 View 中的数据,但在第二个 URL 中看不到数据。

以下是我在主机站点上的php文件;

<?php

//  The JSON standard MIME header.
//  header('content-type: application/json; charset=utf-8');

    $con = mysql_connect('host', 'username', 'password');
    if (!$con) {
        die('mysql connect error: ' .mysql_error());
    }

    mysql_select_db("DataBase", $con);

    $sql_Live = "SELECT * FROM live";
    $mysql_record = mysql_query($sql_Live,$con);

    $row = mysql_fetch_array($mysql_record);
    $jsonData = '{"vT_pv":' . $row['vT_pv'] . ',"iT_pv":' . "4.90" . ',"iS_pv":' . $row['iS_pv'] . ',"vB_pv":' . $row['vB_pv'] . '}';
    echo "<pre >";
    echo $jsonData;
    echo "</pre>";
    mysql_close($con);
?>

被注释掉的标题对格式或任何结果没有影响。 我尝试过以各种方式使用 json encode 函数,但都没有成功。 事实上,使用 json 编码会产生我认为是非 json 格式的格式,所以我使用的上述格式可能格式不正确?但它适用于第一个 URL?

我已经搜索过了,感觉有点卡在这里,所以我想是时候问一下了。

保罗

最佳答案

我几乎毫不怀疑这是 header 的问题。

在 chrome go:view>developer>developer tools>network tab> 然后重新加载并从左侧面板中选择文件,然后查看“headers tab”,它会给你发送或接收的每个 http header 的详细信息你可以找出两个结果之间的差异。

你的 php header("content-type"...) 应该可以工作,但如果不行,它可能是 apache 覆盖了你的 PHP header();如果是这样,请更改 .htaccess 文件中的内容类型或删除 httpd.conf 中 .php 文件的 content-type text/html 属性。

关于php - 来自 PHP 的 Backbone JSON 请求问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13898428/

相关文章:

javascript - 用 Perl 编写多行 Javascript 字符串

javascript - 您如何同时映射生成器结果?

javascript - 如何从html标签读取并解析json文件

json - 用 Circe 递归替换所有 JSON 字符串值

android - GitHub API : finding number of stars, 提交和发布

php - 使用 Curl 登录 Gmail 收件箱?

php - 从以前的网站中删除 301 重定向

javascript - 如何使用 Sweet Alert 确认提交表单?

php - php-src 中的 “zend_execute” 函数在哪里?

需要 PHP 运算符(operator)帮助