2011-08-04 47 views
0

的我在JS一种新的,但我无法相信我已经无法想出解决办法...如何获得的数据进行JQuery.post功能

是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函数内的警报最后出现。任何人都可以解释吗?

回答

5

您neesd使用jQuery.ajax,你需要设置async :false

,因为你的$。员额是一个异步请求,之后异步请求不等待异步函数完成的功能。这就是为什么您的警报无需打印,因为它在$ .post完成之前执行。所以你需要做的要求同步,那么你的函数执行后,警报将运行

myerr=""; 

    $.ajax({ 
      url: "/rpc/validate_song_entry", 
      type: "POST", 
      data: {'title':$('#title').val()}, 
      async:false, 
      success: function(data){ 
      myerr=data.title; 
      } 
     } 
    ); 

alert(myerr); 
0

功能。你的警报(myerr)在myerr被设置之前马上执行。

+0

我现在明白这个帖子是异步完成的。这是有道理的。没有意义的是,按照您看到的顺序弹出警报。我希望最后一次警报(空白的一个)先出现。它不是。它最后出现。 – user877985