2011-08-04 48 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