막대 그래프 morris.js
을 업데이트하는 데 문제가 있습니다.morris 차트가 업데이트되지 않습니다.
페이지가로드, 내가 잘 작동하고 멋진 차트를 만들고 다음과 같은 기능이있는 경우 :
이$(document).ready(function() {
if($('.projectViewTotal').length) {
chart = Morris.Bar({
element: 'LastIncome',
data: [
{ y: '04-02-2014', a: 3 },
{ y: '04-03-2014', a: 10 },
{ y: '04-04-2014', a: 5 },
{ y: '04-05-2014', a: 17 },
{ y: '04-06-2014', a: 6 }
],
xkey: 'y',
ykeys: ['a'],
labels: ['Visits']
});
};
});
그런 다음 몇 가지 사용자 작업 후 나는 아약스를 통해 새로운 데이터를 얻을 내 차트를 업데이트 할을하지만, 안타깝게도 업데이트 후에는 데이터가 차트에 표시되지 않고 레이블은 단지 undefined
입니다. 콘솔을 통해 오류도 발생하지 않습니다.
다음이 같은 차트 업데이트 : 예를 들어,이 데이터 구조가 내가 아약스 대답을 CONSOLE.LOG
var response = $.parseJSON(content);
console.log(response);
chart.setData(response.jsString);
:
Object {jsString: "[ { y: '2014', a: 3505},{ y: '2013', a: 0},{ y: '2012', a: 0},{ y: '2011', a: 0} ]", sort: "getLastIncome"}
을하지만, 내가 말했듯 정의되지 않은 레이블과 내부에 데이터가없는 차트를 가져옵니다.
chart.setData()
너비의 하드 코딩 된 샘플 데이터를 사용하면 모든 것이 올바르게 작동합니다. 그래서 내가 response.jsString
에서 얻은 문자열이 있어야합니다.하지만 이미 콜백에 $.parseJSON
을 사용 했으므로 문제가 어디에 있는지 정말로 알 수 없습니다.
어디에서 오류가 발생 했습니까? 고맙습니다! JTG 제안처럼
, 내가 대신 string
의 numeric array
을 만들기 위해, 내 서버 측 코드를 변경했다
$ausgabeJS = "[ ";
$amount = count($data);
$i = 1;
foreach ($data as $key => $value) {
if($i < $amount) {
$ausgabeJS .= "{ y: '".$key."', a: ".$value."},";
} else {
$ausgabeJS .= "{ y: '".$key."', a: ".$value."}";
}
$i++;
}
$ausgabeJS .= " ]";
$responseArray = array(
"jsString" => $ausgabeJS,
"sort" => $method
);
$result = json_encode($responseArray);
해결책 :
여기 내 서버 측 PHP 코드입니다. 여기에 업데이트 된 코드입니다 :
$data_array = array();
foreach ($data as $key => $value) {
$ar = array(
"y" => $key,
"a" => $value
);
array_push($data_array, $ar);
}
$responseArray = array(
"jsString" => $data_array,
"sort" => $method
);
$result = json_encode($responseArray);
나는 당신의 대답을 이해하지 못합니다. 어떤 키가 문자열이어야합니까? 당신은 내 서버 측에서 배열을 생성해서는 안되며'jsString'과'sort'를 포함하는 결합 된 문자열을 전달하고 그것을 통과해야한다는 것을 의미합니까? – Sebsemillia
'{y :'2014 ', a : 3505}, {y :'2013 ', a : 0}, {y :'2012 ', a : 0}, {y : '2011, a : 0}] "'문자열을 해시 값의 배열에 저장합니다. parseJSON을 사용하지 않고 문자열을 해시 값의 배열로 쉽게 변환하는 방법을 모르겠습니다. 따라서 제안 사항은 유효한 JSON으로 변환하는 것입니다 (예 :'y'와'a')를 문자열로 바꾸는 것입니다. 서버 측에서는 무엇을하는지, 왜'jsString'은 문자열인지를 알고 싶습니다. 그러나 최종 목표는 동일합니다. 'jsString'은 문자열이며 해시 값의 배열이 아니라'.setData()'입니다. – JTG
서버 측에서 json을 어떻게 작성하고 있습니까? 아마도 여기에서 문제를 해결할 수 있습니다 ... – JTG