Javascript 如何从json文件中获取每个值

Javascript 如何从json文件中获取每个值,javascript,json,datatables,cakephp-2.6,Javascript,Json,Datatables,Cakephp 2.6,我尝试用json文件将数据发送到datatable,如下所示: 我的json文件的示例数据: "responseHeader":{ "status":0, "QTime":2, "params":{ "q":"vba", "indent":"true", "fl":"name,role_t,born,natio_t", "wt":"json"}}, "response":{"numFound":7,"start":0,"

我尝试用json文件将数据发送到datatable,如下所示: 我的json文件的示例数据:

"responseHeader":{
    "status":0,
    "QTime":2,
    "params":{
      "q":"vba",
      "indent":"true",
      "fl":"name,role_t,born,natio_t",
      "wt":"json"}},
  "response":{"numFound":7,"start":0,"docs":[
      {
        "name":"Khouli",
        "born":["1978-04-03T00:00:00Z"],
        "natio_t":"tunisien",
        "role_t":"Consultant"},
      {
        "name":"Atayi",
        "born":["1987-06-24T00:00:00Z"],
        "natio_t":"Francaise",
        "role_t":"Consultant"}
}
这就是我的职责:

$ ( document ).ready(function() {
$.ajax({
    type: 'GET',
    url: '../search.json',
    success: function(data) {
        $.each(data, function(i, data) {
            var body = "<tr>";
            body    += "<td>" + data.name + "</td>";
            body    += "<td>" + data.born + "</td>";
            body    += "<td>" + data.natio_t + "</td>";
            body    += "<td>" + data.role_t + "</td>";

            body    += "</tr>";
            $('.datatable-ajax-source table').append(body);
        });
$(文档).ready(函数(){
$.ajax({
键入:“GET”,
url:“../search.json”,
成功:功能(数据){
$。每个(数据,函数(i,数据){
var body=“”;
正文+=“”+data.name+“”;
正文+=“”+data.born+“”;
正文+=“”+data.natio_t+“”;
正文+=“”+data.role\u t+“”;
正文+=”;
$('.datatable ajax source table').append(body);
});
但我得到了一张价值不确定的桌子


如何从json文件中获取此值

您没有告诉jquery您希望返回json,因此它接受来自服务器响应的json字符串作为纯文本,并将其作为纯文本传递到
数据中

使用
.getJSON()
,这将自动将响应解析为本地JS数据结构,或者

$.ajax(
  ...
   dataType: "json"
  ...
);

您的输入数据似乎有误:此处已更正数据:

{
"responseHeader":{
    "status":0,
    "QTime":2,
    "params":{
      "q":"vba",
      "indent":"true",
      "fl":"name,role_t,born,natio_t",
      "wt":"json"}},
      "response":{"numFound":7,"start":0,"docs":[
      {
        "name":"Khouli",
        "born":["1978-04-03T00:00:00Z"],
        "natio_t":"tunisien",
        "role_t":"Consultant"},
      {
        "name":"Atayi",
        "born":["1987-06-24T00:00:00Z"],
        "natio_t":"Francaise",
        "role_t":"Consultant"}
     ]
}
}
处理此问题的正确方法是:

$(document).ready(function() {
$.ajax({
type: 'GET',
url: '../search.json',
success: function(data) {
    // Data is the root node of your json response.
    // You need to navigate through the "docs" node.
    if(data.response.docs && data.response.docs.length > 0)
    {
    $.each(data.response.docs, function(i, item) {
        var body = "<tr>";

        body    += "<td>" + item.name + "</td>";
        body    += "<td>" + item.born + "</td>";
        body    += "<td>" + item.natio_t + "</td>";
        body    += "<td>" + item.role_t + "</td>";

        body    += "</tr>";
        $('.datatable-ajax-source table').append(body);
    }
    });
$(文档).ready(函数(){
$.ajax({
键入:“GET”,
url:“../search.json”,
成功:功能(数据){
//数据是json响应的根节点。
//您需要在“文档”节点中导航。
if(data.response.docs&&data.response.docs.length>0)
{
$.each(data.response.docs,函数(i,项){
var body=“”;
正文+=“”+item.name+“”;
正文+=“”+item.born+“”;
正文+=“”+item.natio\u t+“”;
正文+=“”+item.role\u t+“”;
正文+=”;
$('.datatable ajax source table').append(body);
}
});
您没有为
数据
获取正确的值。
您应该获得
docs.data[i]
,在本例中,它是
,如
中定义的.each()

您的JSON数据以不同方式无效。请发布有效的JSON。显然,
数据
不是数组。我无法理解您为什么将其视为数组。诚然,这可能是问题的一部分,但如果服务器正确设置
内容类型
头,jQuery应该对其进行解析。从我所知,无论哪种方式,他都需要进行解析深入到结构中,这目前是无效的。谢谢@didiraupest您的回答,但当我尝试此解决方案时,我在jquery.min.js:4未捕获类型错误:无法读取Undeinedeach@jquery.min.js:4success@application.js:111c@jquery.min.js:4fireWith@jquery.min.js:4k@jquery.min.js:6的属性“长度”r@jquery.min.js:6应用程序仍然存在相同的错误。js:116未捕获类型错误:无法读取此对齐中未定义的属性“length”(data.response.docs&&data.docs.length>0)我修复了它谢谢你的帮助:我只是激发了你的灵感或你的建议,我用data.response.docs替换了data.docs,它现在可以工作了。我忘了在任何地方应用这些更改!