如果我的 ajax 请求只在调用时执行,为什么会执行两次?

我对 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脚本


    <?php


if(!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();

}



郎朗坤
浏览 264回答 2
2回答

哈士奇WWW

经过更好的调试后,我找到了问题的原因,这确实是由于 Google Chrome 造成的。代码没问题。我想强制向服务器发送错误的数据,并且我正在使用检查 chrome 元素并手动放置任何值的功能来做到这一点,当以这种方式更改值时,Chrome 最终会“堆叠”或“添加”再次调用AJAX的功能,如果我多次改变这种方式,它会堆叠越来越多的调用,我不知道这是否应该是正确的行为带有调用的 HTML:<button&nbsp;id="btnVender"&nbsp;onclick="venderAcao(210,'5mbZz5LpULCs9oKT3BHbzUiW',3)"&nbsp;class="btn&nbsp;btn-vender&nbsp;mt-xl-0&nbsp;mt-lg-3&nbsp;mt-0">Vender</button>如果我更改 onclick 函数的任何这些值,就好像我在 onclick 中调用了两个函数:原始函数和修改后的函数感谢大家的帮助

呼啦一阵风

您可以尝试使用exit;不带 '()' 或return false;orreturn; 并将其放在退出之前http_response_code(500);echo json_encode('ERROR');exit;
打开App,查看更多内容
随时随地看视频慕课网APP