JavaScript数组周围的引号(可能很容易修复)
Quotes Around JavaScript Arrays (Probably Very Easy Fix)
我的数组中的引号有问题,这可能是一个超级简单的修复,但我只是不知道我到底应该如何解决它。
我正在使用JQPlot来制作我的社交媒体信息的图表,如Facebook喜欢,Twitter关注者等。最初,当我加载页面时,我会显示过去两周的所有内容。
然后,我使用原型库CalenderDateSelect为日期添加了两个输入。除了这个之外,我使用jQuery做其他所有事情,所以我所有的jQuery选择器都是:
j$('element').functon();
我在PHP的帮助下引入了我原来的javascript数组。它们如下所示:
<script>
likes=[
<?
$i = 0;
while($like = mysql_fetch_assoc($fb_data)) {
$d_day = date("d-M-y", $like['date']);
if ($i > 0) {
echo ',';
}
echo "['".$d_day."', ".$like['likes']."]";
$i++;
}
?>];
<? mysql_data_seek($fb_data, 0); ?>//this resets $fb_data so I can use it again
dislikes=[
<?
$i = 0;
while($like = mysql_fetch_assoc($fb_data)) {
$d_day = date("d-M-y", $like['date']);
if ($i > 0) {
echo ',';
}
echo "['".$d_day."', ".$like['dislikes']."]";
$i++;
}
?>];
<? mysql_data_seek($fb_data, 0); ?>
impressions=[
<?
$i = 0;
while($like = mysql_fetch_assoc($fb_data)) {
$d_day = date("d-M-y", $like['date']);
if ($i > 0) {
echo ',';
}
echo "['".$d_day."', ".$like['impressions']."]";
$i++;
}
?>];
</script>
然后我把它们放到一个函数中:
socialMedia(likes, dislikes, impressions,false);
此函数执行以下操作(为便于阅读而简化(
function socialMedia(likes, dislikes, impressions, bool) {
console.log(likes);
console.log(dislikes);
console.log(impressions);
var plot1 = j$.jqplot('chart1', [likes, dislikes, impressions], {
title:'Facebook Stats' });
if (bool) {
plot1.destroy();
j$.jqplot('chart1', [likes, dislikes, impressions], {
title:'Facebook Stats' }).replot();
}
}
此处的控制台日志执行以下操作(正确(:
[["19-Nov-13", 163], ["20-Nov-13", 163], ["21-Nov-13", 164], ["22-Nov-13", 165], ["23-Nov-13", 168], ["24-Nov-13", 181], ["25-Nov-13", 205], ["26-Nov-13", 226], ["27-Nov-13", 244], ["28-Nov-13", 250], ["29-Nov-13", 269], ["30-Nov-13", 306], ["01-Dec-13", 313], ["02-Dec-13", 315]]
[["19-Nov-13", 0], ["20-Nov-13", 0], ["21-Nov-13", 0], ["22-Nov-13", 0], ["23-Nov-13", 1], ["24-Nov-13", 1], ["25-Nov-13", 0], ["26-Nov-13", 1], ["27-Nov-13", 0], ["28-Nov-13", 1], ["29-Nov-13", 0], ["30-Nov-13", 0], ["01-Dec-13", 0], ["02-Dec-13", 0]]
[["19-Nov-13", 68], ["20-Nov-13", 116], ["21-Nov-13", 63], ["22-Nov-13", 15896], ["23-Nov-13", 79617], ["24-Nov-13", 42948], ["25-Nov-13", 22290], ["26-Nov-13", 1369], ["27-Nov-13", 928], ["28-Nov-13", 921], ["29-Nov-13", 631], ["30-Nov-13", 700], ["01-Dec-13", 743], ["02-Dec-13", 300]]
请注意日-月-年周围的引号。
到目前为止,一切正常。
然后,我更改结束日期 (e( 和开始日期 (s( 输入,并在执行此操作时调用此函数:
function getNewSocialData(e, s) {
j$.ajax({
type: 'GET',
url: 'ajax/social_media.php?e='+e+'&s='+s,
success:function(json){
data = json;
data = json.split("T");
socialMedia(data[0],data[1],data[2],true);
},
error: function (xhr, ajaxOptions, thrownError) {
alert('There appears to be a problem with the information you submitted. Please try again or contact us.');
}
});
}
在social_media.php中,我执行以下操作:
$end_date = date("Y-m-d 00:00", strtotime($_GET['e']));
$start_date = date("Y-m-d 00:00", strtotime($_GET['s']));
$fb_data = getFacebookData(strtotime($start_date), strtotime($end_date));
$inside_likes = array();
$inside_dislikes = array();
$inside_impressions = array();
$i = 0;
while($like = mysql_fetch_assoc($fb_data)) {
$d_day = date("d-M-y", $like['date']);
$string = $i != 0 ? ',' : '';
$inside_likes[] = $string.'"'.$d_day.'",'.$like['likes'];
$inside_dislikes[] = $string.'"'.$d_day.'",'.$like['dislikes'];
$inside_impressions[] = $string.'"'.$d_day.'",'.$like['impressions'];
$i++;
}
$data['likes'][] = $inside_likes;
$data['dislikes'][] = $inside_dislikes;
$data['impressions'][] = $inside_impressions;
foreach ($data as $data_part) {
foreach ($data_part as $part) {
foreach($part as $info) {
echo $info;
}
echo 'T'; //we split on this
}
}
然后,我们获取这些数据,正如您在 ajax 调用中看到的那样,我们通过 socialMedia(( 函数和控制台运行它.log数据。这次我的数据如下:
"20-Nov-13",163,"21-Nov-13",164,"22-Nov-13",165,"23-Nov-13",168,"24-Nov-13",181,"25-Nov-13",205,"26-Nov-13",226,"27-Nov-13",244,"28-Nov-13",250,"29-Nov-13",269,"30-Nov-13",306,"01-Dec-13",313,"02-Dec-13",315
"20-Nov-13",0,"21-Nov-13",0,"22-Nov-13",0,"23-Nov-13",1,"24-Nov-13",1,"25-Nov-13",0,"26-Nov-13",1,"27-Nov-13",0,"28-Nov-13",1,"29-Nov-13",0,"30-Nov-13",0,"01-Dec-13",0,"02-Dec-13",0
"20-Nov-13",116,"21-Nov-13",63,"22-Nov-13",15896,"23-Nov-13",79617,"24-Nov-13",42948,"25-Nov-13",22290,"26-Nov-13",1369,"27-Nov-13",928,"28-Nov-13",921,"29-Nov-13",631,"30-Nov-13",700,"01-Dec-13",743,"02-Dec-13",300
而且,如您所见,这些不是数组,它们是字符串,因此 JQPlot 抛出错误"未捕获的异常:无数据"。然后,我们修改成功条件以将它们放入数组中:
success:function(json){
var likes = [];
var dislikes = [];
var impressions = [];
var followers = [];
var following = [];
var tweets = [];
data = json;
data = json.split("T");
likes.push(data[0]);
dislikes.push(data[1]);
impressions.push(data[2]);
followers.push(data[3]);
following.push(data[4]);
tweets.push(data[5]);
socialMedia(likes,dislikes,impressions,true);
}....
它控制台如下:
[""20-Nov-13",163,"21-Nov...13",313,"02-Dec-13",315"]
[""20-Nov-13",0,"21-Nov-1...Dec-13",0,"02-Dec-13",0"]
[""20-Nov-13",116,"21-Nov...13",743,"02-Dec-13",300"]
它在那里有我的所有数据,但在引号内,导致 JQPlot 无法解析它,并将我的图表默认为 1969 年 12 月 31 日。
所以,我的问题:我如何以这样的方式推送数据,以便报价不会绕过它?我觉得我可能以某种方式在这里混淆了一个字符串和一个数组。有人可以指出我正确的方向吗?
谢谢一百万!
编辑:
谢谢大家的帮助。我越来越近了。我将我的 PHP 更改为这样运行:
while($like = mysql_fetch_assoc($fb_data)) {
$d_day = date("d-M-y", $like['date']);
$inside_likes[] = array('"'.$d_day.'",'.$like['likes']);
$inside_dislikes[] = array('"'.$d_day.'",'.$like['dislikes']);
$inside_impressions[] = array('"'.$d_day.'",'.$like['impressions']);
}
$data['likes'] = $inside_likes;
$data['dislikes'] = $inside_dislikes;
$data['impressions'] = $inside_impressions;
echo json_encode($data);
exit;
我的 AJAX 调用现在执行以下操作:
j$.ajax({
type: 'GET',
url: 'ajax/social_media.php?e='+e+'&s='+s,
dataType : "json",
success:function(json){
var likes = json['likes'];
var dislikes = json['dislikes'];
var impressions = json['impressions'];
socialMedia(likes, dislikes, impressions, true);
},
...
});
但是现在,当我安慰它时.log它,我得到了这个,请注意双引号。
[[""19-Nov-13",163"], [""20-Nov-13",163"], [""21-Nov-13",164"], [""22-Nov-13",165"], [""23-Nov-13",168"], [""24-Nov-13",181"], [""25-Nov-13",205"], [""26-Nov-13",226"], [""27-Nov-13",244"], [""28-Nov-13",250"], [""29-Nov-13",269"], [""30-Nov-13",306"], [""01-Dec-13",313"], [""02-Dec-13",315"]]
当我应该得到这个时:
[["19-Nov-13", 163], ["20-Nov-13", 163], ["21-Nov-13", 164], ["22-Nov-13", 165], ["23-Nov-13", 168], ["24-Nov-13", 181], ["25-Nov-13", 205], ["26-Nov-13", 226], ["27-Nov-13", 244], ["28-Nov-13", 250], ["29-Nov-13", 269], ["30-Nov-13", 306], ["01-Dec-13", 313], ["02-Dec-13", 315]]
有人有什么建议吗?谢谢!
溶液:
在下面的帮助下,获取字符串和整数格式数组的答案是执行以下操作:
while($like = mysql_fetch_assoc($fb_data)) {
$d_day = date("d-M-y", $like['date']);
$inside_likes[] = array($d_day, intval($like['likes']));
$inside_dislikes[] = array($d_day, intval($like['dislikes']));
$inside_impressions[] = array($d_day, intval($like['impressions']));
}
$data['likes'] = $inside_likes;
$data['dislikes'] = $inside_dislikes;
$data['impressions'] = $inside_impressions;
echo json_encode($data);
在social_media.php
中,您似乎在推动字符串而不是数组。
这似乎是错误的:
$inside_likes[] = $string.'"'.$d_day.'",'.$like['likes'];
试试这个:
$inside_likes[] = array($string.'"'.$d_day, $like['likes']);
看起来您正在脚本中构建自己的 JSON。这不是一个好主意。我会研究使用 json_encode()
格式化 JSON。
更新:
每个数组应包含两个元素:日期字符串和点赞数。您当前正在做的是将两者连接成一个字符串,这不是您想要的。
试试这个:
$inside_impressions[] = array($d_day, $like['impressions']);
- 我如何才能让CasperJS和PhantomJS在约塞米蒂玩得很好
- webpack代码拆分了handlerbs文件——结果是文件很大
- 指令加载真的很长,检查加载时间的方法
- JavaScript数组周围的引号(可能很容易修复)
- 很容易清理锡农树桩
- 尝试将Javascript递归转换为PHP(很容易)
- javascript 冒泡排序问题(可能很容易)
- 如果背景为红色,则jQuery无法识别错误,看起来很容易但很固执
- 不透明度动画应该很容易?(javascript)
- 当使用apply()和call()方法很容易继承时,为什么人们在javascript中使用prototype ?
- 我想删除重复的对象使用javascript/jquery.这可能很容易吗?
- 我怎么能很容易地有一个javascript函数解析出特定的对象从json字符串
- 如何解析多维链接的国家/城市.Json到下拉列表很容易使用javascript或jquery
- 是否有可能很容易地添加一个jquery/javascript鼠标悬停延迟css只下拉菜单
- 在php中url参数名称是否区分大小写?如果不区分大小写,是否可以很容易地将它们规范化(并小写,等等)
- Jquery很容易不收费.js
- Javascript 3D库,可以很容易使用
- Django函数从模板调用?(应该很容易)
- 必须很容易- Div面板文本似乎重新调整中心时,点击以折叠面板
- 为什么在SELECT属性周围放一个DIV会很麻烦呢?