【问题标题】:Cannot send a database timestamp through JavaScript but can send other values无法通过 JavaScript 发送数据库时间戳,但可以发送其他值
【发布时间】:2012-02-03 04:07:09
【问题描述】:

我正在使用 PHP5、MySQL、JavaScript 和 Fusion Charts。

我从数据库返回以下时间值:2011-12-19 12:00:00

从数据库中获取它后,我尝试通过 JavaScript strURL 将其传递到另一个页面,在该页面中我可以使用此值进行进一步的数据库调用。我遇到的问题是,只要我通过日期/时间发送 JavaScript,它就会失败。我可以通过任何其他值类型发送并且它可以工作,所以问题似乎与时间戳有关。我已经尝试在它被传递之前将它转换为字符串(只是为了确保它还不是一个),但这不起作用。我猜这与值中的字符有关。知道如何解决这个问题吗?

PHP 中的数据库调用,然后将字段发送到 JavaScript:

$strQuery = "SELECT unit, watts, time, device, siteid FROM inverter WHERE time = '2011-12-19 12:00:00' AND siteid = '842'";
$result2 = mysql_query($strQuery) or die(mysql_error());

if ($result2) {
    while($ors2 = mysql_fetch_array($result2)) {
        $thetime = (string)$ors2['time'];
        $strXML .= "<set color='58ACFA' label='" . $ors2['device'] . "/" . $ors2['unit'] . "' value='" . $ors2['watts'] . "' link='javaScript:updateChart(" . $ors2['unit'] . " , " . $ors2['device'] . " , " . $ors2['siteid'] . " , " . $thetime . ")'/>";
    }
}

然后是 JavaScript 函数:

function updateChart(first, second, third){
    //DataURL for the chart
    var strURL = "FactoryData.php?factoryId=" + first + "&device=" + second + "&siteid=" + third;
    FusionCharts("FactoryDetailed").setXMLUrl(strURL);
}

【问题讨论】:

  • 一些示例代码会很棒,如果您通过 url 参数发送值,您是否尝试过对值进行 urlencoding?
  • 也许我是盲人,但我在您发布的 Javascript 函数中看不到任何日期/时间变量...我在您对 updateChart() 的调用中看到 4 个参数,但该方法仅收到 3 个参数,并且不引用任何日期时间值。你能仔细检查你的例子吗?
  • 是的,对不起,这就是为什么我没有首先发布我的代码 - 因为它是一团糟!我一直在取出东西并放入东西,即使没有该变量,图表也应该加载,因为目前我没有在 javascript 的另一端调用它。如果我将“.$thetime.”变量更改为其他任何内容,那么它会让 javascript 加载,只有当它是时间戳时才会加载图表。

标签: php javascript mysql string timestamp


【解决方案1】:

您可以将日期转换为时间戳,例如

new Date('2011-12-19 12:00:00').getTime()

或使用encodeURIComponent('2011-12-19 12:00:00')对其进行编码

后者可能是更好的解决方案,因为它适用于所有类型的值,而不仅仅是日期。如果您想在客户端读取参数,您可以使用decodeURIComponent,这在服务器端应该已经可以正常工作了。

【讨论】:

    【解决方案2】:
    link='javaScript:updateChart(" . $ors2['unit'] . " , " . $ors2['device'] . " , " . $ors2['siteid'] . " , " . $thetime . ")'
    

    这个 JavaScript 变成了类似

    updateChart(341, 454, 842, 2011-12-19 12:00:00);
    

    前三个参数是有效数字(我假设 ID 是整数),但第四个参数会导致语法错误。您需要做的是将其用引号括起来以使其成为字符串:

    link='javaScript:updateChart(... " , \"" . $thetime . "\")'
                                         ^^                ^^
    

    现在的 JavaScript 应该是这样的:

    updateChart(341, 454, 842, "2011-12-19 12:00:00");
    

    【讨论】:

    • 是的,就是这样一个 :D 虽然发现有更多的引号涉及,所以两边都需要 3 个反斜杠....噩梦!!
    猜你喜欢
    • 1970-01-01
    • 2015-10-07
    • 2020-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-07
    • 2022-12-18
    • 2019-06-19
    相关资源
    最近更新 更多