使用ajax / json的JQuery错误。语法错误?

时间:2014-05-07 18:49:45

标签: javascript php jquery ajax json

首先,我应首先说这是我使用AJAX的第一天,所以我为我的任何愚蠢道歉。

我正在使用JQuery 1.8.2和PHP5来填充包含数据的页面。

这是我的javascript函数:

function requestData(dataType) {
$.ajax({
type: 'POST',
datatype: 'json',
error: function(obj, txt, err){alert('error:' + txt + ', Thrown' + err);},
url: 'charts/plotLiveData.php?dataType='+dataType+'&sid=3868&pos=2&start=1366066800&end=1371204000',
success: function(data){alert(data);},
cache: false
}); 

PHP文件plotLiveData.php是此示例的缩减版本,并且是:

<PHP
echo "[[Date.UTC(2013,5,14,7,00),33981.56442],
[Date.UTC(2013,5,14,8,00),33981.56309],
[Date.UTC(2013,5,14,9,00),33981.56376],
[Date.UTC(2013,5,14,10,00),33981.56347],
[Date.UTC(2013,5,14,11,00),33981.56177]]";
?>

Firebug告诉我JSON响应的数据格式正确 BUT jquery.js第8416行有错误(使用未缩小的版本只是为了找到错误) 这是一行:

xhr.send( ( s.hasContent && s.data ) || null );

“提醒”框中的错误文字告诉我: 错误:parsererror 抛出:SyntaxError:JSON.parse:意外字符

我现在很困惑。 什么是无效字符? 方括号?但它是一个数组,在Firebugs Response和JSON窗口中看起来没问题。

这里有什么问题,我不知所措?

3 个答案:

答案 0 :(得分:1)

那是你发送的json。 JSON不能包含任何“可执行”代码,例如函数/对象调用。 http://json.org/

您可以将日期值作为unix时间戳(例如int)发送出来,然后在客户端解码json后将其转换为Date对象,但不能在该字符串中进行Date调用

echo "[[12345,33981,56442]...." // ok
echo "[[Date.UTC(...),....]...." // utterly invalid

JSON可能是Javascript数据结构的文本表示,但它不是可执行的javascript代码。

答案 1 :(得分:1)

这是invalid JSON string。您正在寻找类似的东西:

$array = array(
    array(date_create('2013-05-14 07:00')->getTimestamp(), '33981.56442'),
    array(date_create('2013-05-14 08:00')->getTimestamp(), '33981.56309'),
    ...
);

echo json_encode($array);
// [
//   [1368529200,"33981.56442"],
//   [1368532800,"33981.56309"],
//   ...
// ]

<强>文档

答案 2 :(得分:1)

这样的事可能适合你。确保使用您给出的功能。

json_encode

<?php
echo json_encode(
    array(
        array('date' => 'Date.UTC(2013,5,14,7,00)', 'point' => 33981.56442),
        array('date' => 'Date.UTC(2013,5,14,8,00)', 'point' => 33981.56309),
        array('date' => 'Date.UTC(2013,5,14,9,00)', 'point' => 33981.56376),
        array('date' => 'Date.UTC(2013,5,14,10,00', 'point' => 33981.56347),
        array('date' => 'Date.UTC(2013,5,14,11,00)', 'point' => 33981.56177)
    )
);
?>