似乎无法正确设置全球变量

0 javascript ajax jquery

我正在尝试将令牌存储到全局变量中.当警报运行时,它表示为null,但如果我一个接一个地发出2个警报,则第一个显示为null,但第二个显示令牌.

它就像没有设置令牌,因为第一个警报是在ajax请求完成之前运行的.

有没有人对我做错了什么有任何想法?

var csrf_token = null;

$(document).ready(function(){
    get_csrf_token();
    alert('token 1 '+csrf_token);
    alert('token 2 '+csrf_token);
});

function get_csrf_token()
{
    $.ajax({
        type: "GET",
        url: "http://buscore/index.php/includes/csrf_token/",
        dataType: "json",
        success: function(resp, status) {
            if (resp.status != 'success')
            {
                alert('Error - Update CSRF Token\n\n' + resp.status);
                return;
            }

            csrf_token = resp.csrf_token;
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

谢谢

更新

好的,谢谢大家的帮助,但仍然没有看到这将如何工作.我使用像jqgrid这样的get_csrf_token()来发送带有如下请求的令牌.那么如何将令牌传递给它并让它工作呢?

beforeRequest: function (){
        get_csrf_token()
        //alert(csrf_token);
        $("#customer_grid").setPostDataItem('<?php echo $csrf_token_name; ?>', csrf_token);
    }
Run Code Online (Sandbox Code Playgroud)

Que*_*tin 5

成功回调函数在HTTP响应到达时运行.

在测试中,响应在第一个警报显示的时间到您单击按钮以使脚本继续的时间之间到达.

对回调中的数据执行任何操作,而不是作为启动Ajax请求的语句之后的语句.

评论要求的示例:

$(document).ready(function(){
    get_csrf_token();
});

function get_csrf_token()
{
    $.ajax({
        type: "GET",
        url: "http://buscore/index.php/includes/csrf_token/",
        dataType: "json",
        success: function(resp, status) {
            if (resp.status != 'success')
            {
                alert('Error - Update CSRF Token\n\n' + resp.status);
                return;
            }

            alert('token 1 '+csrf_token);
            alert('token 2 '+csrf_token);
        }
    });
}
Run Code Online (Sandbox Code Playgroud)