JavaScript 之 回調函數的返回值給全局變量賦值問題


  jQuery 中,會遇到$.get(url,data,callback,type) 或 $.post(url,data,callback,type) 返回值給全局變量賦值的問題:

例如:

<script language="JavaScript"> 
    var count= 1; 
    $.post("<%=path%>/AdminCenter/SysFunction/GetOrderNo", 
      { parentCode: pc },
          function (data) {
              count = data.result;
          },
          "json");

alert(count); </script>

問題:想用JavaScript 取testController中GetIsExist的值,賦給test.aspx中的全局變量 count,可是返回的值只在$.getJSON中起作用count為8,在全局中顯示時仍為1,請問該問題如何解決?

問題原因:Ajax是默認都是異步JavaScript&XML,瀏覽器解析頁面時,JS只管執行當前代碼,順序執行。發送請求了,那是請求響應的事,它不管這些,只管繼續執行在它面前的代碼,所以不等Ajax響應返回,便會繼續向下執行,這時你的全局 count 仍然是初始值(在這里為1),如果你在回調函數function(data){}內部alert的話,就會是8了。

方法一:直接在回調函數中實現操作

<script language="JavaScript"> 
    var count= 1; 
    $.post("<%=path%>/AdminCenter/SysFunction/GetOrderNo", 
      { parentCode: pc },
          function (data) {
              count = data.result;
              alert(count); 

          },
          "json");
</script>

方法二:在回調函數外實現,把異步改為同步 async: false

<script language="JavaScript"> 
    var count= 1;      
   $.ajax({ url:
"<%=path%>/AdminCenter/SysFunction/GetOrderNo", async: false, //改為同步方式 type: "POST", data: { parentCode: pc }, success: function (data) { count = data.result;
}, dataType:"json" });
    alert(count);
</script>

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM