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

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

如果我的 ajax 請求只在調用時執行,為什么會執行兩次?

如果我的 ajax 請求只在調用時執行,為什么會執行兩次?

PHP
郎朗坤 2023-09-08 10:21:52
我對 php 中的腳本有一個 ajax 請求,在這個腳本中,我對過去的值進行了多次檢查,然后在調用 DAO 方法將信息保存在數據庫中之后,到目前為止一切正常,問題是當驗證失敗我使用 echo json_enconde ($error) 返回錯誤并使用 exit()。會出現什么問題?好吧,即使退出也會發生一些奇怪的行為,是的,返回 $error ,但即使有此返回,成功函數也會被觸發兩次,一個將其返回給我,另一個繼續調用腳本并將信息保存在數據庫。阿賈克斯$.ajax({    method: "POST",    url: "ajax/compra-acao.php",    data: {usuario_id: usuario, cod: c, qtd: quantidade, acao: acao1},    dataType: 'JSON',    success: function(response){            console.log(response)            document.getElementById('btnComprar').disabled = false            return 0;        }    },    error: function(response, status, error){        alert(response.responseText);    }})PHP腳本    <?phpif(!isset($_POST['usuario_id']) || !isset($_POST['cod']) || !isset($_POST['qtd']) || !isset($_POST['acao'])){    echo json_encode($retorno['erro'] = 'Houve um erro ao processar sua solicita??o. POST');    exit();}include_once('../PDO/acaoDAO.php');include_once('../PDO/usuarioDAO.php');$usuario = new UserBD();$acao = new Acao();$retorno = [];$usuario = $usuario->getUserById($_POST['usuario_id']);if(!$usuario){    $retorno['erro'] = 'Houve um erro ao processar sua solicita??o';    echo json_encode($retorno);    exit();}if(!password_verify($usuario[0]['cpf'], $_POST['cod'])){    $retorno['erro'] = 'Hoje n?o, espertinho';    echo json_encode($retorno);    exit();}if($_POST['qtd'] < 1){    $retorno['erro'] = 'Quantidade inválida';    echo json_encode($retorno);    exit();}$precoAcao = $acao->getPrecoAcaoById($_POST['acao']);if(!$precoAcao){    $retorno['erro'] = 'A??o inválida';    echo json_encode($retorno);    exit();}$saldo = $acao->getSaldoDinheiroById($_POST['usuario_id']);if($saldo < (double) $precoAcao * (int) $_POST['qtd']){    $retorno['erro'] = 'Saldo insuficiente';    echo json_encode($retorno);    exit();}
查看完整描述

2 回答

?
哈士奇WWW

TA貢獻1799條經驗 獲得超6個贊

經過更好的調試后,我找到了問題的原因,這確實是由于 Google Chrome 造成的。代碼沒問題。

我想強制向服務器發送錯誤的數據,并且我正在使用檢查 chrome 元素并手動放置任何值的功能來做到這一點,當以這種方式更改值時,Chrome 最終會“堆疊”或“添加”再次調用AJAX的功能,如果我多次改變這種方式,它會堆疊越來越多的調用,我不知道這是否應該是正確的行為

帶有調用的 HTML:

<button id="btnVender" onclick="venderAcao(210,'5mbZz5LpULCs9oKT3BHbzUiW',3)" class="btn btn-vender mt-xl-0 mt-lg-3 mt-0">Vender</button>

如果我更改 onclick 函數的任何這些值,就好像我在 onclick 中調用了兩個函數:原始函數和修改后的函數

感謝大家的幫助


查看完整回答
反對 回復 2023-09-08
?
呼啦一陣風

TA貢獻1802條經驗 獲得超6個贊

您可以嘗試使用exit;不帶 '()' 或return false;orreturn; 并將其放在退出之前


http_response_code(500);

echo json_encode('ERROR');

exit;


查看完整回答
反對 回復 2023-09-08
  • 2 回答
  • 0 關注
  • 311 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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