【问题标题】:Accessing multi JSONs访问多个 JSON
【发布时间】:2016-06-18 07:23:21
【问题描述】:

在浏览器的控制台我有这个:

这是由这个 AJAX 返回的:

function displayFiles(){
var classElements = document.querySelectorAll("table.folders-list tr.ui-selected td span");
var csrf = $('input[name=_token]').val();
for(var x = 0;x < classElements.length;x++){
    var result;
    result = classElements[x].innerHTML;
    $.ajax({
        async: false,                      
        method: 'POST',
        dataType: 'json',
        url: '../public/getfiles',
        data: { 'folder': result, "_token": csrf  },
        success: function(data) {
        }
    });
}; 
}

我想访问它们。尝试console.log(data[0].filename);,但出现错误。 当有一个 JSON 时,我得到 TypeError: data[0] is undefined,而如果有多个 JSON(就像在图片中一样),则不会返回任何内容。 这是发送该对象的 PHP 函数:

public function getFiles() {
    $folder = $_POST['folder'];
    $userid = Auth::id();
    $query = File::orderBy('created_at', 'desc')->where('userid', $userid)->where('folder', $folder)->get();
    // foreach for many result returned by $query
    foreach($query as $result){
        $arr = array();
        $arr['filename'] = $result->filename;
        $arr['id'] = $result->fileid;
        $arr['size'] = $result->conv_filesize;
        echo json_encode($arr);
    }      
}

【问题讨论】:

  • 你遇到了什么错误?请尽量详细说明您尝试过的代码及其给出的确切信息。
  • @IMSoP 更新了问题
  • 你是发送两个不同的 JSONObject 吗?为什么?你可以用那些 JSONObject 发送 JSONArray 对吗?顺便说一句,您在服务器端使用哪种编程语言? PHP?
  • @RafiqueMohammed 是的 PHP,看,又更新了问题
  • 您的 PHP 代码在我看来是错误的:它会导致类似于 {"id": 1}{"id": 2} 的内容,这是无效的 JSON;您应该将项目放入一个数组中,并在最后调用一次json_encode,这样您就可以得到类似[{"id": 1},{"id": 2}]

标签: php arrays json ajax


【解决方案1】:

您似乎将多个 JSON 字符串并排放置。这又不是有效的 JSON。

您的输出类似于{"x": 1}{"y": 2},它必须是[{"x": 1},{"y": 2}]

尝试在一次调用json_encode() 中输出所有数据:

public function getFiles() {
    $folder = $_POST['folder'];
    $userid = Auth::id();
    $query = File::orderBy('created_at', 'desc')->where('userid', $userid)->where('folder', $folder)->get();
    // foreach for many result returned by $query
    $json = array();
    foreach($query as $result){
        $arr = array();
        $arr['filename'] = $result->filename;
        $arr['id'] = $result->fileid;
        $arr['size'] = $result->conv_filesize;
        $json[] = $arr;
    }    
    echo json_encode($json);
}

您也可以尝试使用 JSON 验证器。 ;)

【讨论】:

  • json[] = $arr; 给出unexpected = after ]
  • 你忘记了 json[] 前面的$;这可能是我的问题的解决方案
  • 呃,是的。解决了这个问题。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-08-21
  • 2014-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-26
相关资源
最近更新 更多