如何从JQuery.post函数中获取数据

时间:2011-08-04 06:41:26

标签: jquery function variables post scope

我是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函数中的警报最后出现。谁能解释一下呢?

3 个答案:

答案 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)

$ .post(...)中的

函数执行AFTER,因为它是异步完成的。您的警报(myerr)会在myerr设置之前立即执行。