首先,我应首先说这是我使用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窗口中看起来没问题。
这里有什么问题,我不知所措?
答案 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)
这样的事可能适合你。确保使用您给出的功能。
<?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)
)
);
?>