jQuery 中,會遇到$.get(url,data,callback,type) 或 $.post(url,data,callback,type) 返回值給全局變量賦值的問題:ajax
例如:json
<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了。異步
方法一:直接在回調函數中實現操做async
<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>