关于JQuery中的ajax请求或者post请求的回调方法中的操作执行或者变量修改没反映的问题...
???? 前段時間做一個項目,而項目中所有的請求都要用jquery 中的ajax請求或者post請求,但是開始處理一些簡單操作還好,但是自己寫了一些驗證就出現問題了,比如表單提交的時候,要驗證帳號的唯一性,所以要在submit前先請求一次,驗證帳號是否已被使用,
中間有一段js如下:
?var state = false;
??? $.post(url,{username:username},function(data){
?? ??? ?if(!data){
?? ??? ??? ?$('#username').removeClass().addClass('notpass');
?????? ??? ?$('#usernameSpan').html("<font color='red'>*該帳號已被使用!</font>");
?? ??? ?}else{
?? ??? ??? ?$('#username').removeClass().addClass('pass');
?? ??? ???? $('#usernameSpan').html("<font color='green'>√ 通過</font>");
?? ??? ???? state = true;
?? ??? ?}
??? });
??? return state;
可是不管data為真還是為假,返回值均為false,讓我相當郁悶,后來在網上查了下資料,原來這是ajax異步調用導致的。
以前一直不太懂ajax異步調用的原理,后來仔細看了下別人的講解,才算明白。所謂ajax異步調用就是當用戶提交ajax請求的時候,不會等待請求的返回結果,跳過ajax代碼塊,繼續往下執行(post請求也是ajax請求的一種,是一種簡化版)。針對這段代碼,就是初始state為fasle,而發送一個post請求之后,因為不會等待返回結果,所以中間的if--else 判斷還未執行,所以返回的state此時為false。
?????? 那怎么讓它等待返回結果之后,在繼續往下執行呢?有兩種方法:
????? 第一種:在一開始把ajax請求設置為同步的,因為ajax請求默認為異步的。即把async 屬性設置為false;設置全局的代碼如下:
??? $.ajaxSetup({
??? async : false
??? });
??? 第二種是在請求中設置,即只設置某個方法為同步的,那么該方法就會等待返回結果,其它方法仍然為異步的。代碼如下:
?? $.ajax({
??????? type: "POST",
??????? async : false,
??????? url: url,
??????? success: function(data){
?????????? alert( msg );
??????? }
??? });
轉載于:https://www.cnblogs.com/wanghang/p/6298919.html
總結
以上是生活随笔為你收集整理的关于JQuery中的ajax请求或者post请求的回调方法中的操作执行或者变量修改没反映的问题...的全部內容,希望文章能夠幫你解決所遇到的問題。