1. 程式人生 > >ajax回撥函式不能賦值

ajax回撥函式不能賦值

在做表單驗證碼功能的時候,思路是當驗證碼錯誤的時候,提示錯誤資訊,同時return false,不執行post請求。驗證碼正確的時候執行post請求。

      var data="action="+$('#confirm-code').val();
      var flag;  //作為是否執行post請求的標記
      $.ajax({ 
        type:"POST",
        data:data,
        url:"login/chk_code.php",
        dataType:'json',
        success:function(json) {   
        if (json.msg == '0') {
              alert('驗證碼錯誤');
              $('#getcode-num').attr("src","resource/code_num.php?"+Math.random());
              flag = 0;  //驗證碼錯誤標記為0
        }  else if (json.msg == '1') {
           alert("他媽的終於可以了");
              flag = 1;  //驗證碼正確標記為1
        }   
    }   
  }); 
  if (flag == 0)  //如果標記為0,則不執行post請求
  return false;
問題來了,不管驗證碼正不正確,都不執行post請求,除錯的時候發現,給標記flag賦值的語句並沒有正確執行

原因在於,ajax預設是非同步執行,也就是說當js執行到ajax語句的時候,並不會等待ajax執行完,而是繼續執行下面的語句,而這個時候,flag的賦值語句還沒有執行。

解決方法是,設定ajax為同步請求

      var data="action="+$('#confirm-code').val();
      var flag;
      $.ajax({ 
        type:"POST",
        async:false,  //設定同步請求
        data:data,
        url:"login/chk_code.php",
        dataType:'json',
        success:function(json) {   
        if (json.msg == '0') {
              alert('驗證碼錯誤');
              $('#getcode-num').attr("src","resource/code_num.php?"+Math.random());
              flag = 0;  
        }  else if (json.msg == '1') {
           alert("他媽的終於可以了");
              flag = 1;
        }   
    }   
  }); 
  if (flag == 0)
  return false;


相關推薦

ajax函式不能

在做表單驗證碼功能的時候,思路是當驗證碼錯誤的時候,提示錯誤資訊,同時return false,不執行post請求。驗證碼正確的時候執行post請求。 var data="action="+$('#confirm-code').val(); var

自定義函式傳遞

  回撥函式是一段可執行的程式碼段,它作為一個引數傳遞給其他的程式碼,其作用是在需要的時候方便呼叫這段(回撥函式)程式碼。 回撥函式 ? 1

layui之ajax--函式

問題:一個簡單的AJAX提交表單操作,經常發生後臺資料儲存好了,前端layer彈出層沒有關閉,父頁面沒有重新整理,定位發現是回撥函式沒有執行!!!用Google Chrome瀏覽器這種現象較少,而Safari 和 firefox瀏覽器100%發生。 解決過程:困擾了很久,以

SpringMVC在處理Ajax請求後返回void導致前臺Ajax函式不執行

問題簡述 在一次SpringMVC專案中,前臺通過Ajax請求,準備修改資料庫中的資料。因為Ajax請求只是讓後臺更改資料,所以Controller方法根本不需要返回給前臺任何資料,所以我們將Controller的方法的返回值設定為void。但令我困擾的是,前端頁面本應該執行的回撥函式一直不

【JS】關於for迴圈中的click函式索引錯誤的思考

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=dev

jQuery 中ajax函式獲得的資料格式問題

目的:在使用ajax做前、後臺互動時,有時需將從controller返回的資料在jsp頁面的表格展示出來;但是,如果資料格式不對,是無法展示的。 解決方法: 1.controller中返回一個Lis

使用@ResponseBody返回String物件無法觸發ajax函式

莫名其妙!!!!!!! 用@ResponseBody返回一個String物件無法觸發前臺回撥函式,而且你確定你程式碼沒有問題 如果你前臺的ajax中寫了dataType:"json"屬性,把它去掉 就可以了。。。。。。。

ajax函式 返回404

先貼程式碼: JS程式碼如下。 PProductComposing.searchUp = function() { var _id = "#pProductComposing_type"; var url = $('#ctx').val()+"/pages/pProdu

pthread_create函式返回

Linux平臺中通過POSIX介面建立執行緒函式為: #include <pthread.h> int pthread_create(pthread_t *restrict tidp, const p

jquery Ajax函式

在學習js期間一直不明白回撥函式的意思,當我理解了才發現是我自己想多了,回撥函式其實是個很好理解的東西,我真正不理解的是當jquery ajax傳送一個請求時為什麼會執行這個回撥函式,其實這個回撥函式是ajax請求中定義的一個方法而已,jquery ajax請求封裝的核心物

jquery中ajax函式使用this

今天在寫ajax請求的時候success中程式碼老是不能正常執行,找了半天原因。程式碼如下 $.ajax({type: 'GET', url: "/flag/",

jquery ajax函式帶入引數

不帶引數的寫法 function pass(htmlId,auditingFlag){ var url = 'ad_auditing.action'; var params = { 'adInfo

獲取$.post $.get函式返回問題

專案中用Jquery操作,肯定避免不了向伺服器傳送請求,所以就會用到上面的兩個函式。完整的函式格式如下: ?$.get(URL,callback); ?$.post(URL,data,callback); 而某些時候我們要用callback回撥函式處理完以後的返回值

用谷歌的AsyncHttpClient簡單模仿安卓的AsyncHttpClient,實現非同步請求函式返回

實現思路 既然要呼叫Future.get() 才能激發訪問,那麼就想到了使用一個執行緒去訪問。我們就不需要等待阻塞了。 模仿安卓的AsyncHttpClient回撥。根據狀態回撥不同的函式。 實現的效果 執行程式碼...

ajax非同步函式中給外部變數的問題

<!doctype html> <head> <meta charset="utf-8"> </head> <body> <script src="http://localhost/UIBMSPHPProj

關於jquery ajax請求發了,返回也有,但是卻無法進去ajax的success函式

        這幾天在除錯專案中發現了jquery ajax出現了,請求發了,用chorme的network 發現請求也成功了,最後發現沒有進入ajax的success回撥函式,這個問題經我除錯發現

函式指標和 函式

問:先定義了個函式: int function(int a, int b) { .......... } main函式裡面有個函式指標 問題1:那麼下面兩種對函式指標的賦值哪個是正確的,還是都可以? int main(void) { A: in

函式的返回給全域性變數的問題

            今天遇到一個問題,在js中,回撥函式的返回值對全域性變數進行賦值,網上的解決方案主要是把非同步改為同步 async: false,好記性不如爛筆頭來記錄一下。             原始碼如下: $('#loginSubmit').click

nodejs request模組使用promise 返回函式中的

var request = require('request'); //exports.httprequest = (requestData) =>{ function httprequest(requestData){ return new Promise((resolve, rejec

JS為變速移動新增任意多個屬性包括函式

//封裝新增任意多個屬性的函式 //fn這個引數是為這個函式新增的回撥函式 function changeAll(ele,json,fn){ //每次都清除一次定時器 clearInterval(ele.timed); //設定定時器 ele.timed=se