我正在尝试将 token 存储到全局变量中。当警报运行时,它显示为 null,但如果我一个接一个地放置 2 个警报,则第一个显示为 null,但第二个显示为 token 。
就像未设置 token 一样,因为第一个警报是在 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;
}
});
}
谢谢
已更新
好的,谢谢大家的帮助,但仍然不知道这是如何工作的。我使用像 jqgrid 这样的 get_csrf_token() 来发送带有如下请求的 token 。那么我如何传递 token 并让它工作呢?
beforeRequest: function (){
get_csrf_token()
//alert(csrf_token);
$("#customer_grid").setPostDataItem('<?php echo $csrf_token_name; ?>', csrf_token);
}
最佳答案
成功回调函数在 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);
}
});
}
关于javascript - 似乎无法正确设置全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5485952/