English 中文(简体)
Ajax/JSON Form jQuery.parseJSON () 如何在 JavaScript 中写每个值出错误?
原标题:Ajax/JSON Form jQuery.parseJSON() error how to write each value in JavaScript?

我制作了一个显示用户统计图表的表格。 用户需要选择月份和年份, 然后将显示图表 。

我用AJAX做了这个 并做了JSON的回答。

这是我的JavaScript代码:

//Show statistic
$( .statistic_submit ).click(function(){
    if ($( #month ).val() ==  none  || $( #year ).val() ==  none ) {
        $("#dialog_empty").dialog( "open" );
        return false;
    }

    var form = $( #statistic_view );  
    var data = form.serialize(); 

    $.ajax({
        url: "include/scripts/user_statistic.php",
        type: "POST",
        data: data,
        dataType:  json ,
        success: function (reqCode) {
            console.log(reqCode);
            if (reqCode[ error_code ] == 1) {
                //Generate diagram  
                $(".done").html( 
                     <p class="bold center">  + reqCode[ month ] +     + reqCode[ year ] +  </p>  +
                     <canvas id="cvs" width="650" height="250">[No canvas support]</canvas> 
                );  

                var data_string = jQuery.parseJSON(reqCode[ data_string ]);
                var labels_tooltip = jQuery.parseJSON(reqCode[ labels_tooltip ]);
                var labels_string = reqCode[ labels_string ];

                var chart = new RGraph.Line( cvs , data_string);
                    chart.Set( chart.tooltips , labels_tooltip);
                    chart.Set( chart.tooltips.effect , "expand");
                    chart.Set( chart.background.grid.autofit , true);
                    chart.Set( chart.gutter.left , 35);
                    chart.Set( chart.gutter.right , 5); 
                    chart.Set( chart.hmargin , 10);
                    chart.Set( chart.tickmarks ,  circle );
                    chart.Set( chart.labels , labels_string);
                    chart.Draw();

                $( .done ).fadeOut( slow ); 
                $( .done ).fadeIn( slow );
            }
            if (reqCode[ error_code ] == 2) {
                //No values found
                $( .done ).fadeOut( slow );
                $("#dialog_error").dialog( "open" );
            }
        }
    });
    return false;
});

以下是我用户- 统计. php 的摘录:

$data = array();
$sql = "SELECT
                Anzahl
            FROM
                 Counter
            WHERE
                 YEAR(Datum) =  ".$year."  AND
                 MONTH(Datum) =  ".$month." ";

    if (!$result = $db->query($sql)) {
        return $db->error;
    }

    $row = $result->fetch_assoc();
    $data = (int)$row[ Anzahl ];

$response[ error_code ] =  1 ; 
    $response[ data_string ] = "[" . join(", ", $data) . "]";
    $response[ labels_string ] = "[ " . join(" ,  ", $labels) . " ]";
    $response[ labels_tooltip ] = "[ " . join(" ,  ", $data) . " ]";
    $response[ month ] = $month_name[$month];
    $response[ year ] = $year;

    echo json_encode($response);

此对重新qCode 响应 :

error_code "1"
data_string "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 2, 2, 0, 26, 1, 5, 3, 1, 1, 0, 0, 0, 0, 0, 0]"  
labels_string "[ 1 ,  2 ,  3 ,  4 ,  5 ,  6 ,  7 ,  8 ,  9 ,  10 ,  11 ,  12 ,  13 ,  14 ,  15 ,  16 ,  17 ,  18 ,  19 ,  20 ,  21 ,  22 ,  23 ,  24 ,  25 ,  26 ,  27 ,  28 ,  29 ,  30 ,  31 ]" 
labels_tooltip "[ 0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  3 ,  2 ,  2 ,  0 ,  26 ,  1 ,  5 ,  3 ,  1 ,  1 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ]" 
month "Mai" 
year 2012

.log写道:

JSON.parse: unexpected character!

我发现数据字符串运作良好。 标签字符串和标签工具串是问题所在, 因为... 。 唯一的问题是图表需要... 。

我新到 JavaScript 和 Ajax/JSON, 所以我不知道如何处理这件事。 在 php 中, I 会使用一个数组来进行循环 。 例如 :

echo "[";
for ($i; $i<= ..;$i++) {
  echo " ".reqCode[ labels_string ][$i]." , ";
}
echo"]";

有什么建议吗?

最佳回答

问题出在解析单引号 。 JSON使用双引号 来设定字符串值。 因此, 您的 valid 字符串 JSON 响应应该看起来像 > ["1,1,2,2",...]" , 而您的 [1,2,......]" 是错误的 。

事实上,我不明白你为什么做这种事:

$response[ data_string ] = "[" . join(", ", $data) . "]";

如果您最后使用 json_encode($response)

实际上, PHP 函数 json_encode () 将成功字符串您的 $response 阵列, 即使有些元素包含其他阵列 。

所以,你可以简单地使用

$response[ data_string ] = $data;

然后,在客户端,不需要用 parseJsson 方法来解析字符串。 您只需要这样来解析字符串 :

var data_string = reqCode[ data_string ];

如果您需要通过有字符串元素的 $data 阵列, 您可以创建新的阵列, 或者使用类似的东西 :

array_filter($data, create_function( $x ,  return strval($x) ));
问题回答

暂无回答




相关问题
ajax login using httpRequest?

I am trying to develop my login script to give feedback to the user if the login is valid or not. Basically if it isn t correct a div box will show saying its wrong, if its correct it will show its ...

Virtual Tour using sketch up, ajax, flash technologies

I want to know if there are existing technology that make your 3d models in sketch into virtual tours, using either Ajax or Flash for web presentation. If there s none, which will be a good approach ...

How can i update div continuously

I have asp.net application where i have a div which showing the value from other site. The value of that site is changing continuously. I want that my div will automatically update in some interval ...