var bbb;
var ma_category;
ma_category="Vocabulary";
$(document).ready(function() {
$("#create_matching_activity").click(function(){
$.ajax({
type: "POST",
url: "a_category_code.php?ma_category="+ma_category,
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(data){
bbb=data.Act_Category_Code;
},
complete: function(){
}
});
alert(bbb);
});
});
<?php
include('ActivityConf.php');
$ma_cat=$_GET['ma_category'];
$sql = $connect->prepare("SELECT Act_Category_Code FROM activity_category WHERE Act_Category='".$ma_category."'");
$sql->setFetchMode(PDO::FETCH_ASSOC);
$sql->execute();
$row = $sql->fetch();
$connect=null;
header('Content-type: application/json');
echo json_encode($row);
?>
此代码从数据库中读取。即时通过使用ajax将变量从javascript传递给php。一切都很好,但当我点击得到我的答案时,我得到了#34; undefined&#34;作为第一次点击的警报,然后第二次点击我在警报中获得正确的变量。
这种延迟的原因是什么?如果有人可以帮助解决这个问题。 谢谢。
答案 0 :(得分:2)
同步调用您的警报,而bbb
在回调内异步填充 - success
。bbb
。
换句话说,在第一次点击之后,success
没有填充数据(这就是未定义的原因)。第二次单击时,bbb
函数很有可能被执行并用数据填充alert
。
解决问题的方法是将success: function(data){
bbb=data.Act_Category_Code;
alert(bbb);
},
从$ .ajax之外移到$ .ajax.success内:
long