使用javascript延迟从ajax读取变量

时间:2016-08-21 22:58:11

标签: javascript php jquery ajax

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;作为第一次点击的警报,然后第二次点击我在警报中获得正确的变量。

这种延迟的原因是什么?如果有人可以帮助解决这个问题。 谢谢。

1 个答案:

答案 0 :(得分:2)

同步调用您的警报,而bbb在回调内异步填充 - successbbb

换句话说,在第一次点击之后,success没有填充数据(这就是未定义的原因)。第二次单击时,bbb函数很有可能被执行并用数据填充alert

解决问题的方法是将success: function(data){ bbb=data.Act_Category_Code; alert(bbb); }, 从$ .ajax之外移到$ .ajax.success内:

long