为了账号安全,请及时绑定邮箱和手机立即绑定

如果我的 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 关注
  • 256 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信