假设我正在使用Jquery执行发布请求:
var information;
$.post( url, function( data ) {
information = data;
});
console.log(information);//This is undefined! Why?
为什么信息变量未定义?即使在帖子请求结束后,我该怎么做才能存储数据?
答案 0 :(得分:2)
$ .post是异步的,所以你必须使用$ .ajaxSetup({async:false});在它之前得到你期待的结果。
基本上发生的是你的console.log正在运行之前$ .post回调可以将数据保存到变量中,因此会出现未定义的错误。
答案 1 :(得分:1)
你必须从适当的回调中获得它。 $ .post()是异步的。这是一个例子:
// Get some values from elements on the page:
var $form = $( this ),
term = $form.find( "input[name='s']" ).val(),
url = $form.attr( "action" );
// Send the data using post
var posting = $.post( url, { s: term } );
// Put the results in a div
posting.done(function( data ) {
var content = $( data ).find( "#content" );
$( "#result" ).empty().append( content );
});
来自jQuery文档:http://api.jquery.com/jquery.post/
另外,我不推荐Dontfeedthecode的建议。永远不应该在javascript中使用同步模式,因为它具有非预期的效果,例如锁定用户界面的某些部分。对于测试或特定情况可能没问题,但我想我应该提一下这个免责声明。
答案 2 :(得分:0)
$ .post是一个异步函数,所以当你调用console.log(information);
信息变量仍然为空时,所以你应该只使用$ .post函数内的数据或使用回调函数。
var information;
$.post( url, function( data ) {
workDone(data);
});
function workDone(data){
information = data;
console.log(information);
}