我對 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 中調用了兩個函數:原始函數和修改后的函數
感謝大家的幫助

呼啦一陣風
TA貢獻1802條經驗 獲得超6個贊
您可以嘗試使用exit;不帶 '()' 或return false;orreturn; 并將其放在退出之前
http_response_code(500);
echo json_encode('ERROR');
exit;
- 2 回答
- 0 關注
- 311 瀏覽
添加回答
舉報
0/150
提交
取消