通过Ajax传递的解析JSON对象

4

我将尝试解析从数据库返回并编码为JSON对象的信息。

以下是检索信息的代码:

   private function retrieve_standards_one(){
    $dbh = $this->connect();
    $stmt = $dbh->prepare("SELECT code, standard_one_id 
                           FROM standard_one 
                           WHERE grade_id = :grade_id 
                           ORDER BY standard_one_id");
    $stnd = array();
    for($x = 0; $x < (count($this->grades)); $x++){                    
    $stmt->bindParam(':grade_id', $this->grades[$x], PDO::PARAM_STR);
    $stmt->execute();
    $stnd[] = $stmt->fetchAll(PDO::FETCH_ASSOC);
    }
    $json = json_encode($stnd);
    return $json;
}

这是我尝试解析信息的方法:
  $.ajax({
        type: "POST",
        url: "lib/search/search.standards_one.php",
        async: "false",
        data: {subjects: subjects, grades: grades},
        success: function(response){
                $("#standards_results").html("");
                var obj = $.parseJSON(response);
                $.each(obj, function(){
                    alert(this['code'] + ", " + this['standard_one_id'])
                });
            }
        });

我已经尝试了多种方法来做到这一点,但我只会得到[object][object]作为响应。
这是响应内容: http://i.imgur.com/E5Hux.png

3
[object Object] 是对象的默认字符串表示形式,因此您的代码可能正常工作。如果您想检查变量,请使用 console.log 而非 alert,因为 alert 是一个非常糟糕的调试工具。另外,不要将对象与字符串连接! - Felix Kling
控制台仍然只返回[对象]。 - Brendan
你移除了字符串拼接吗?请使用 console.log(this['code']); console.log(this['standard_one_id'])。使用 alert 和字符串拼接都会将对象转换为字符串,这是应该避免的。 - Felix Kling
是的,我运行了: console.log(this['code'], this['standard_id']); - Brendan
$.ajax选项中添加dataType:'json',jQuery将自动管理JSON解析。response将根据从服务器发送的内容而定,可能是数组或对象。不要使用async:false - charlietfl
我已经告诉过你,alert 不是调试/检查的正确工具,但你还是用它来截图了。请发布 console.log(obj)console.log(response) 的输出结果。 - Felix Kling
2个回答

2
使用

console.log(this['code'] , this['standard_one_id'])

与其

alert(this['code'] + ", " + this['standard_one_id'])

最好使用console.log(this['code'], this['standard_one_id'])。如果你坚持使用字符串拼接,也不会有太大的区别。 - Felix Kling
是的,它可以提供更好的输出。 - Akhil Sekharan
控制台仍然只返回[objects]。 - Brendan
你尝试过记录你的ajax响应吗? - Akhil Sekharan
1
你能在你的问题中发布响应吗? - Akhil Sekharan
显示剩余2条评论

0
在你的 AJAX 调用中添加 dataType 属性。 $.ajax({
    type: "POST",
    dataType: "JSON",
    url: "lib/search/search.standards_one.php",
    async: "false",
    data: {subjects: subjects, grades: grades},
    success: function(response){
            $("#standards_results").html("");
            var obj = $.parseJSON(response);
            $.each(obj, function(){
                alert(this['code'] + ", " + this['standard_one_id'])
            });
        }
    });

如果你这样做,就必须删除$.parseJSON(response);。此外,我认为这不会有任何区别。你只是改变了解析响应的时刻。 - Felix Kling

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接