javascript - 使用javascript从ajax读取变量的延迟

标签 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。一切都很好,但是当我单击以获取答案时,我会收到“未定义”作为第一次单击的警报,然后第二次单击我会在警报中获得正确的变量。

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

最佳答案

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

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

问题的解决方法是将 alert 从 $.ajax 外部移动到 $.ajax.success 内部:

success: function(data){
    bbb=data.Act_Category_Code;
    alert(bbb);
},

关于javascript - 使用javascript从ajax读取变量的延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39069556/

相关文章:

javascript - 客户端React添加ld+json脚本标签

javascript - 如何判断是否已经滚动到元素的底部?

javascript - jquery remove 从另一个元素中删除

php - 添加到购物车不适用于 magento 中的子商店

php - yii 重定向不工作

javascript - AJAX 在第一个表单之后不处理表单

javascript - 如何清空javascript而不删除html表

jQuery ajax 一键发送多个请求

javascript - 将数组作为指令参数传递

PHP PDO::FETCH_ASSOC 返回 false