如何解析json数组并将其附加到数据表中

时间:2015-06-15 12:03:38

标签: php jquery json datatables

我无法将值附加到数据表,PHP文件提供JSON响应,但我无法将数据附加到数据表。我已经使用以下代码进行JSON响应

GetKeyWordBids.php

    array_push($ret, array("keyword"=>$keyword, "svol"=>$search_volume));
}

//print_r($ret);
echo json_encode($ret); 

和Json回复:

[{
    "keyword": "interventional cardiology",
    "svol": 6600
},{
    "keyword": "pediatric cardiology",
    "svol": 5400
},{
    "keyword": "cardiology jobs",
    "svol": 1300 
},{
    "keyword": "cardiology associates",
    "svol": 6600
},{
    "keyword": "interventional cardiology jobs",
    "svol": 880
},{
    "keyword": "european society of cardiology",
    "svol": 5400
},{
    "keyword": "nuclear cardiology",
    "svol": 1600
}],

我的Jquery代码是:

$('#specialty').change(function(){
    $("#example1").dataTable().fnDestroy(); 
    var oTable = $('#example1').dataTable({
        "aaSorting": []
    });
    var spevalue = $("#specialty option:selected").text();
    var dataString='specialty='+ spevalue;

    $.ajax({
        type: "POST",
        url: "GetKeyWordBids.php",
        data: dataString,
        success: function(s){
            oTable.fnClearTable();
            for(var i = 0; i < s.length; i++) {
                oTable.fnAddData([
                    s[i]['keyword'][0],
                    s[i]['svol'][0]
                ]);
            }
        });
    });

但我收到的错误如下所示。请让我知道所需的更改。

  

DataTables警告(表格ID =&#39; example1&#39;):请求的未知参数&#39; 0&#39;来自第0行的数据源

1 个答案:

答案 0 :(得分:0)

JSON解析器对JSON非常严格。然后您对数据的实际调用格式错误。所以:

  1. 根据splash58的评论,确保您的dataType是JSON。在浏览器的开发人员工具(或Firebug)中,查看XHR。该工具应提供一个标签,用于以格式化的JSON查看响应。如果它没有,或者您在请求中看到错误,则可能会请求错误的标头,或者返回错误的类型。

  2. 一般情况下,JavaScript解释器可能会忽略尾随逗号,但JSON解析器是严格的并且不会喜欢它。快速检查JSON格式的方法是将其激活到JSONLint.com以查看它是否有效。您在上面提供的那个不会在您最后删除逗号之前。

  3. 我假设你想要完整的&#34;关键字&#34;和&#34; svol&#34;。额外的[0]正在挖掘字符串并返回第一个字符。你对数据的了解太深了!你想要的是s[i]['keyword'](或s[i].keyword)和s[i]['svol'](或s[i].svol)这个小提琴:http://jsfiddle.net/v07tvuq8/

  4. 我不确定fnClearTablefnAddData的组合是您正在寻找的。 DataTables API允许您指定每个列在初始化时应该执行的操作,此后您只需要在其上调用draw()。不应该迭代您的数据集。