0

我正在尝试遍历从 php 文件返回的数组。

如果我运行这个:

  $.ajax({
        type: "POST",
        url: "lib/search/search.standards_one.php",
        async: "false",
        dataType: "json",
        data: {subjects: subjects, grades: grades},
        success: function(response){
            $("#standards_results").html("");
            $.each(response[0], function(){
                  console.log(this['code'], this['standard_id']);
            });
            }
        });

一切正常。

但是,我需要使用数组(等级)作为参数来遍历这个响应。

像这样:

  $.ajax({
        type: "POST",
        url: "lib/search/search.standards_one.php",
        async: "false",
        dataType: "json",
        data: {subjects: subjects, grades: grades},
        success: function(response){
                $("#standards_results").html("");
                var len = grades.length;
                var param = "";
                for(var x=0; x < len; x++){
                    param = grades[x];
                    $.each(response[param], function(){
                    console.log(this['code'], this['standard_id']);
                    });
                }
            }
        });

但是,当我运行它时,我得到“无法读取未定义的属性'长度'”错误。

我尝试了许多不同的解决方案,但我仍然得出了这个结果。

////

这是创建 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;
}
4

1 回答 1

1

grades超出了您的成功功能的范围,这就是它未定义的原因。ajax 是异步的,因此调用被触发,并且您的success函数仅在收到响应(并且成功)时执行。

一个快速的解决方法是将您需要的变量放在全局范围内,或者response如果它们在其中则从中获取它们。

var len = response.length;
于 2012-12-26T20:29:33.617 回答