ajax 的同步和异步
http://www.10086bank.com/2013327171624481.html
?
大家先看一段簡單的jquery ajax 返回值的js
代碼?
function getReturnAjax{
? $.ajax({
??? type:"POST",
????http://www.cnblogs.com/wlmemail/admin/%22ajax/userexist.aspx",
??? data:"username="+vusername.value,
??? success:function(msg){
??? if(msg=="ok"){???
?? showtipex(vusername.id,"<img src='images/ok.gif'/><b><font color='#ffff00'>該用戶名可以使用</font></b>",false)
????? return true;
??? }
??? else
??? {????
??? showtipex(vusername.id,"<img src='images/cancel.gif'/><b><font color='#ffff00'>該用戶已被注冊</font></b>",false);
????? vusername.className="bigwrong";
????? return false;
??? }
??? }
? });
? }
?但是我們調用這個getReturnAjax()發現始終取得的都是false,那就是說return true,return false根本沒有起作用,在火狐下用firebug調試也證明,代碼根本不會執行到return 部分。
我們試想在函數里先定義一個變量,然后在ajax里賦值,最后在函數的末尾返回這個變量,會不會有效果呢?我們把代碼修改如下:
代碼?
function getAjaxReturn()???
{
?????? var bol=false;
? $.ajax({
??? type:"POST",
????http://www.cnblogs.com/wlmemail/admin/%22ajax/userexist.aspx",
??? data:"username="+vusername.value,
??? success:function(msg){
??? if(msg=="ok"){???
?? showtipex(vusername.id,"<img src='images/ok.gif'/><b><font color='#ffff00'>該用戶名可以使用</font></b>",false)
????? // return true;
?? bol=true;
??? }
??? else
??? {????
??? showtipex(vusername.id,"<img src='images/cancel.gif'/><b><font color='#ffff00'>該用戶已被注冊</font></b>",false);
????? vusername.className="bigwrong";
????? //return false;
??? }
??? }
? });
? return bol;
? }
結果仍然不起作用。最后解決方案有2,如下
1、添加async:false.即修改為同步了,什么意思?(按同事解釋就是,這是等這個ajax有了返回值后才會執行下面的js。一語道破天機,怪不得以前很多ajax調用里面的賦值都不起作用)。這樣等ajax給bol賦值完畢后,才執行下面的js部分。而剛剛異步的話,還沒有來得及賦值,就已經return了。
?
代碼?
function getAjaxReturn()???
{
?????? var bol=false;
? $.ajax({
??? type:"POST",
??? async:false,
????http://www.cnblogs.com/wlmemail/admin/%22ajax/userexist.aspx",
??? data:"username="+vusername.value,
??? success:function(msg){
??? if(msg=="ok"){???
?? showtipex(vusername.id,"<img src='images/ok.gif'/><b><font color='#ffff00'>該用戶名可以使用</font></b>",false)
????? // return true;
?? bol=true;
??? }
??? else
??? {????
??? showtipex(vusername.id,"<img src='images/cancel.gif'/><b><font color='#ffff00'>該用戶已被注冊</font></b>",false);
????? vusername.className="bigwrong";
????? //return false;
??? }
??? }
? });
? return bol;
? }
2、 通過傳入一個函數解決這個問題。
代碼?
function getAjaxReturn(success_function,fail_function)
{
?????? var bol=false;
? $.ajax({
??? type:"POST",
????http://www.cnblogs.com/wlmemail/admin/%22ajax/userexist.aspx",
??? data:"username="+vusername.value,
??? success:function(msg){
??? if(msg=="ok"){???
?? showtipex(vusername.id,"<img src='images/ok.gif'/><b><font color='#ffff00'>該用戶名可以使用</font></b>",false)
success_function(msg);
??? }
??? else
??? {????
??? showtipex(vusername.id,"<img src='images/cancel.gif'/><b><font color='#ffff00'>該用戶已被注冊</font></b>",false);
????? vusername.className="bigwrong";
fail_function(msg);
????? //return false;
??? }
??? }
? });
function success_function(info)
{
//do what you want do
alert(info);
}
funciont fail_function(info)
{
//do what you? want do
alert(info);
}
ClickCounts: 44??CommentS: 1??
feifei at 2013-3-27 17:16:24.481 do it
The Next:我的記事(48)
轉載于:https://www.cnblogs.com/chinhi/archive/2013/04/28/3049195.html
總結
以上是生活随笔為你收集整理的ajax 的同步和异步的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 有关单点登录的几种方案
- 下一篇: zigbee cc2530 灌电流 拉电