我将字符串转换为数组对象时遇到问题。
我的字符串看起来像[{ label: "BSP", y: 3 },{ label: "BJP", y: 10 }]"}]
我希望它像
[
{ label: "BSP", y: 3 },
{ label: "BJP", y: 10 }
]
问题描述
我正在制作图表Canvas Js。我想要一些ajax请求的图表。
我的示例代码是
jQuery.ajax({
url: baseurl+"api/",
data: postData,
type: 'POST',
success: function(html) {
var poll_result = JSON.parse(html); // html = [{"question":"Lorem ipsum","title":"Poll Result","data_option":"[{ label: \"BSP\", y: 3 },{ label: \"BJP\", y: 10 },{ label: \"Congress\", y: 4 },{ label: \"AAP\", y: 1 },{ label: \"SP\", y: 2 },{ label: \" SP\", y: 1 }]"}]
var data_option = poll_result.data_option.replace(/\\/g, "");
var chart = new CanvasJS.Chart("chartContainer", {
animationEnabled: true,
axisX: {
interval: 10
},
axisY: {
title: poll_result.title,
},
data: [{
type: "bar",
dataPoints: data_option
// dataPoints: [ { label: "BSP", y: 3 }, { label: "BJP", y: 10 }, { label: "Congress", y: 4 }] // Working code
}]
});
chart.render();
}
});
直接分配变量不起作用,因为它认为它是一个字符串。所以我希望data_option
看起来像参考文献中给出的那样。
修改1
我的PHP数组看起来像
$output = Array
(
[question] => Lorem ipsum
[title] => Poll Result
[data_option] => [{ label: "BSP", y: 3 },{ label: "BJP", y: 10 },{ label: "Congress", y: 4 },{ label: "AAP", y: 1 },{ label: "SP", y: 2 },{ label: " SP", y: 1 }]
)
我转换成JSON并回应。
echo json_encode($output);
修改2
我的真实代码结构是
$poll_output_result['question'] = 'Lorem ipsum';
$poll_output_result['title'] = 'Poll Result';
$poll_output_result['data_option'] = '';
foreach($poll_result as $result){
$poll_output_result['data_option'] .= '{ label: "'.$result['user_choice'].'", y: '.$result['count'].' },';
}
$poll_output_result['data_option'] = trim($poll_output_result['data_option'], ',');
$poll_output_result['data_option'] = '['.$poll_output_result['data_option'].']';
echo json_encode($poll_output_result);
答案 0 :(得分:-1)
你原来的问题是从ajax请求返回JSON答案,而是你收到plein文本。这就是为什么你必须JSON.parse你的内容。
要从服务器指定答案类型,您必须在答案中添加正确的标题。
在PHP中的TODO:
//In top of your php file
header('Content-Type: application/json');
//[...]
echo json_encode($myArray);
编辑1
因为你使用JSON_ENCODE,所以你不需要自己创建json,让PHP为你做。用这个替换你的代码:
$poll_output_result['question'] = 'Lorem ipsum';
$poll_output_result['title'] = 'Poll Result';
$poll_output_result['data_option'] = [];
foreach($poll_result as $result){
$poll_output_result['data_option'][] = [
'label' => $result['user_choice'],
'y' => $result['count']
];
}
echo json_encode($poll_output_result);