Не удается отправить метку времени базы данных через JavaScript, но можно отправлять другие значения - PullRequest
1 голос
/ 05 января 2012

Я использую 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);
}

Ответы [ 2 ]

1 голос
/ 05 января 2012
link='javaScript:updateChart(" . $ors2['unit'] . " , " . $ors2['device'] . " , " . $ors2['siteid'] . " , " . $thetime . ")'

Этот JavaScript становится чем-то вроде

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

Первые три аргумента являются действительными числами (я предполагаю, что идентификаторы являются целыми числами), но четвертый аргумент вызывает синтаксическую ошибку. Что вам нужно сделать, это заключить его в кавычки, чтобы сделать его строкой:

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

Теперь JavaScript должен быть таким:

updateChart(341, 454, 842, "2011-12-19 12:00:00");
0 голосов
/ 05 января 2012

Вы можете преобразовать дату в метку времени, например,

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

или закодируйте его с помощью encodeURIComponent('2011-12-19 12:00:00')

Последнее, вероятно, является лучшим решением, поскольку оно работает со всеми видами значений, а не только с датами. Вы можете использовать decodeURIComponent, если хотите прочитать параметры на стороне клиента, это уже должно нормально работать на стороне сервера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...