亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

AJAX 不斷顯示數組中的錯誤數據

AJAX 不斷顯示數組中的錯誤數據

收到一只叮咚 2021-12-12 10:55:34
我有一個循環調用多個 AJAX 來確定數據庫中是否有任何預訂。JS 將數組中的數據傳遞給 AJAX,并通過 SQL 查詢在數據庫中找到它。但是,從 AJAX 返回的數據是正確的,如果它在數據庫中,我想顯示從 AJAX 返回的數據和當前循環中數組的當前值,但我從數組中顯示的數據仍然是數組的最后一個索引。javascript :function getButtonInfo() {    var jam = [7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22];    var lap = ['Lapangan A','Lapangan B','Lapangan Batminton'];    var lapId = ['lapA','lapB','lapBat'];    for (var j = 0; j < lap.length; j++){      for (var i = 0;i < jam.length; i++){        var lapIdFix = jam[i]+lapId[j];        var lapId2 = jam[i]+lap[j];        var lap1 = lap[j];        if(jam[i] < 10){          var jamFix = '0'+jam[i]+':00:00';         }else{          var jamFix = jam[i]+':00:00';        }        $.ajax({          type: "POST",          url:'get-button-avail-ajax.php',          data: {            date: document.getElementById('tgllapA').value,            time: jamFix,            lapangan: lap[j]          },          complete: function (response) {            if(response.responseText != "0"){              document.getElementById(lapIdFix).disabled = true;              $('#output').html(response.responseText );              $('#output1').html(lapIdFix);              $('#output2').html(lapId2);            }else{              $('#output3').html(response.responseText);            }            //$('#output').html(response.responseText);*          },          error: function () {              $('#output').html('ERROR!');          },        });      }    }    return false;    }PHP文件:<?php    ob_start();    $error=""; // Variable To Store Error Message    $connection = mysqli_connect(/*credential*/);    $tgl = $_POST['date'];    $time = $_POST['time'];    $lap = $_POST['lapangan'];    //Query    $query = mysqli_query($connection, "SELECT * FROM lapangan_book WHERE tanggal='$tgl' and jam='$time' and lapangan='$lap'");    $rows = mysqli_num_rows($query);    $data = mysqli_fetch_array($query);    if($rows > 0){        echo $data['lapangan'];    }else{        echo "0";    }?>輸出應該是Lapangan A22lapA22Lapangan A
查看完整描述

1 回答

?
德瑪西亞99

TA貢獻1770條經驗 獲得超3個贊

是的,這是因為 ajax 的 Asyncroniouse 行為。您必須通過兩種技巧發送異步請求,async: false或者您必須在 ajax 請求成功響應后調用遞歸函數。


Trick 1-aysnc: false在ajax請求中傳遞選項,但是有些瀏覽器會在ajax的同步請求中拋出警告


        $.ajax({

          type: "POST",

          url:'get-button-avail-ajax.php',

          async:false,

          data: {

            date: document.getElementById('tgllapA').value,

            time: jamFix,

            lapangan: lap[j]

          },

          complete: function (response) {

            if(response.responseText != "0"){

              document.getElementById(lapIdFix).disabled = true;

              $('#output').html(response.responseText );

              $('#output1').html(lapIdFix);

              $('#output2').html(lapId2);

            }else{

              $('#output3').html(response.responseText);

            }

            //$('#output').html(response.responseText);*

          },

          error: function () {

              $('#output').html('ERROR!');

          },

        });

      }

技巧二:遞歸函數,這是最準確的調用方式


function getButtonInfo() {

    var jam = [7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22];

    var lap = ['Lapangan A','Lapangan B','Lapangan Batminton'];

    var lapId = ['lapA','lapB','lapBat'];

    var i=0;

    var j=0;

    var ajaxCall= function(){

        var lapIdFix = jam[i]+lapId[j];

        var lapId2 = jam[i]+lap[j];

        var lap1 = lap[j];

        if(jam[i] < 10){

          var jamFix = '0'+jam[i]+':00:00'; 

        }else{

          var jamFix = jam[i]+':00:00';

        }


        $.ajax({

          type: "POST",

          url:'get-button-avail-ajax.php',

          async:false,

          data: {

            date: document.getElementById('tgllapA').value,

            time: jamFix,

            lapangan: lap[j]

          },

          complete: function (response) {

            if(response.responseText != "0"){

              document.getElementById(lapIdFix).disabled = true;

              $('#output').html(response.responseText );

              $('#output1').html(lapIdFix);

              $('#output2').html(lapId2);

            }else{

              $('#output3').html(response.responseText);

            }

            //$('#output').html(response.responseText);*

            var recursiveCall=true;

            i=i+1;

            if(i>=jam.length){

                j=j+1;

                if(j>=lap.length) recursiveCall= false;

                else i=0;

            }

            if(recursiveCall===true)

            {

                 ajaxCall();

            }

          },

          error: function () {

              $('#output').html('ERROR!');

          },

        });

    }

    ajaxCall();

    return false;

}

我已經編寫了代碼供您理解可能是您必須在此代碼中進行修改


查看完整回答
反對 回復 2021-12-12
  • 1 回答
  • 0 關注
  • 192 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號