我是JS的新手,但我无法相信我一直无法理解......
myerr是全球定义的。 我将myerr =设置为帖子的返回值。 一旦我离开了这个功能,就会失去它的价值。
myerr="";
$.post("/rpc/validate_song_entry", {'title':$('#title').val()}, function(data){
alert(data.title); //----> Alerts expected result.
myerr=data.title;
alert(myerr); //-----> Alerts expected result.
}, "json");
alert(myerr); //-------> Nothing. Blank dialog.
在我看来,这是一个可变范围问题,但我看不出如何......
编辑: 我在下面发布了这个,但不知道如何删除它... 我现在明白这篇文章是异步完成的。这是有道理的。没有意义的是,警报按您看到的顺序弹出。我希望最后一个警报(空白警报)首先出现。它不是。它出现在最后。
我希望post函数中的警报最后出现。谁能解释一下呢?
答案 0 :(得分:5)
您需要使用jQuery.ajax
,并且需要设置async :false
因为$ .post是异步请求,异步请求后的函数不等待异步函数完成。这就是为什么你的警报打印没有任何东西,因为它在$ .post完成之前执行。因此您需要使请求同步,然后在您的函数执行后,将运行警报
myerr="";
$.ajax({
url: "/rpc/validate_song_entry",
type: "POST",
data: {'title':$('#title').val()},
async:false,
success: function(data){
myerr=data.title;
}
}
);
alert(myerr);
答案 1 :(得分:1)
这是因为帖子是异步。您将不得不使用$ .ajax来解决您的问题,并将其设置为异步。
//编辑:还要看一下:Using $.post within a javascript function, cannot assign value to a variable?
答案 2 :(得分:0)
函数执行AFTER,因为它是异步完成的。您的警报(myerr)会在myerr设置之前立即执行。