Javascript 通过Ajax(JSON)响应循环时出错
我试图循环遍历从php文件返回的数组 如果我运行这个:Javascript 通过Ajax(JSON)响应循环时出错,javascript,jquery,ajax,json,Javascript,Jquery,Ajax,Json,我试图循环遍历从php文件返回的数组 如果我运行这个: $.ajax({ type: "POST", url: "lib/search/search.standards_one.php", async: "false", dataType: "json", data: {subjects: subjects, grades: grades}, success: function(response)
$.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']);
});
}
}
});
但是,当我运行此命令时,我会得到undefined error的Cannot read属性'length'
我尝试了许多不同的解决方案,但我仍然得到了这个结果
////
这是创建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是异步的,因此调用被触发,并且只有在收到响应并且成功时才执行success函数
一个快速修复方法是将您需要的变量放在全局范围内,或者从响应中获取它们(如果它们在那里)
var len = response.length;
您可以添加一个JSON的示例吗?在成功块上未定义等级。您必须使用得到的响应来定义它。函数返回什么-grades对象在那里吗?这正是我需要的。谢谢你,先生