AJAX sempre pensa que os retornos de php são bem-sucedidos, mesmo após a falha

CodedUnknown

Eu tenho um script php que adiciona uma nova conta de usuário. Parte de addAccount () verifica se o nome de usuário é válido e, caso contrário, retorna uma exceção de que não está disponível (um erro fatal aparece). Meu problema é que o AJAX interpreta tudo como um sucesso e exibe a mensagem de sucesso de qualquer maneira. Como faço para corrigir isso ou, pelo menos, detecto o erro fatal e exibo a mensagem adequada?

$(document).on('click', '#createUserBtn', function(e){
    e.preventDefault();
    $.ajax({
        url:'addUser.php',
        type:'post',
        data:$('#addUser').serialize(),
        success:function(){

                toastr.success("User successfully added!");
            },
        error: function(){
            toastr.warning('Uh-oh! Something went wrong with adding this user!');
        }
    });
});

addUser.php

<?php
session_start();
/* Include the database connection file (remember to change the connection parameters) */
require './db_inc.php';

/* Include the Account class file */
require './account_class.php';

  $type = $_POST['type'];
  $username = $_POST['uname'];
  $password = $_POST['password'];
  $comp = $_POST['company'];
  $email = $_POST['email'];
  $fname = $_POST['fname'];
  $lname = $_POST['lname'];
  $query = $pdo->query("SELECT * FROM accounts WHERE email ='".$email."'");

$account = new Account();
// Will print all the values received.
    $newId = $account->addAccount($username, $password, $comp, $email, $fname, $lname, $type);
    header('Location: ./dashboard.php?user='.$username);



?>

Aqui está a função addAccount que é usada ...

    public function addAccount(string $name, string $passwd, string $comp, string $email, string $fname, string $lname, string $type): int
    {
        /* Global $pdo object */
        global $pdo;

        /* Trim the strings to remove extra spaces */
        $name = trim($name);
        $passwd = trim($passwd);

        /* Check if the user name is valid. If not, throw an exception */
        if (!$this->isNameValid($name))
        {
            throw new Exception('Invalid user name');
        }

        /* Check if the password is valid. If not, throw an exception */
        if (!$this->isPasswdValid($passwd))
        {
            throw new Exception('Invalid password');
        }

        /* Check if an account having the same name already exists. If it does, throw an exception */
        if (!is_null($this->getIdFromName($name)))
        {
            throw new Exception('User name not available');
        }

        /* Finally, add the new account */

        /* Insert query template */
        $query = 'INSERT INTO login.accounts (account_name, account_passwd, fname, lname, company, email, user_type) VALUES (:name, :passwd, :fname, :lname, :comp, :email, :type)';

        /* Password hash */
        $hash = password_hash($passwd, PASSWORD_DEFAULT);

        /* Values array for PDO */
        $values = array(':name' => $name, ':passwd' => $hash, ':lname' => $lname, ':fname' => $fname, ':comp' => $comp, ':email' => $email, ':type' => $type);

        /* Execute the query */

            $res = $pdo->prepare($query);
            $res->execute($values);

        /* Insert query template */





        /* Return the new ID */
        return $pdo->lastInsertId();
    }
aidinMC

Primeiro você não pode redirecionar o usuário via php se você solicitar algo de javascript, remova esta linha de addUser.php

header('Location: ./dashboard.php?user='.$username);

Agora, para retornar o resultado do php para o cliente, você deve DIEphp com valor, a melhor maneira é JSON

Em addUser.php verifique o que você deseja e retorne o valor assim:

    <?php

session_start();
/* Include the database connection file (remember to change the connection parameters) */
require './db_inc.php';

/* Include the Account class file */
require './account_class.php';

  $type = $_POST['type'];
  $username = $_POST['uname'];
  $password = $_POST['password'];
  $comp = $_POST['company'];
  $email = $_POST['email'];
  $fname = $_POST['fname'];
  $lname = $_POST['lname'];
  $query = $pdo->query("SELECT * FROM accounts WHERE email ='".$email."'");

$account = new Account();
// Will print all the values received.
    $newId = $account->addAccount($username, $password, $comp, $email, $fname, $lname, $type);
        if(intval($newId) > 0) // if user created
            die(json_encode(array('status' => 'ok')));
        else
            die(json_encode(array('status' => 'error')));
    ?>

Em seguida, mude seu lado do cliente como abaixo:

$(document).on('click', '#createUserBtn', function(e){
    e.preventDefault();
    $.ajax({
        url:'addUser.php',
        type:'post',
        data:$('#addUser').serialize(),
        dataType: "json", // <- Add this line
        success:function(response){ // <- add response parameter
                //Here check result
                if(response['status'] == 'ok')
                    toastr.success("User successfully added!");
                else
                    toastr.warning('Uh-oh! Something went wrong with adding this user!');

            },
        error: function(){

        },
    statusCode: { // <- Add this property
        500: function() {
             toastr.warning('Uh-oh! Something went wrong with adding this user!');
        }
    }
    });
});

Este artigo é coletado da Internet.

Se houver alguma infração, entre em [email protected] Delete.

editar em
0

deixe-me dizer algumas palavras

0comentários
loginDepois de participar da revisão

Artigos relacionados

Por que os dados de resposta da solicitação AJAX vêm com erro e não são bem-sucedidos?

Como obter logs de eventos CodeDeploy mesmo quando são bem-sucedidos?

ng e2e falha em alguns dos casos de teste que são bem-sucedidos com o comando protractor protractor.conf

O upload de um arquivo fragmentado usando Ionic4 e Angular HttpClient falha após alguns uploads bem-sucedidos com net :: ERR_FILE_NOT_FOUND

Como escrever uma condição JavaScript que relata se os comandos git são bem-sucedidos ou falham no terminal?

O plug-in Jenkins Build Flow com o plug-in PTC Integrity falha mesmo se os trabalhos forem bem-sucedidos

RegCreateKeyEx e RegOpenKeyEx são bem-sucedidos, mas RegSetValueEx falha ao definir o valor

Por que as instalações de aplicativos pagos para Android são mais do que pedidos bem-sucedidos?

Eclipse falha onde javac e IDEA são bem-sucedidos

O https Node.js falha, enquanto o navegador, `curl` e` wget` são bem-sucedidos?

Finalizando o filtro em Scala em uma lista após um número de resultados bem-sucedidos

O Gradle não tem conhecimento sobre a biblioteca de configuração automática personalizada - os testes falham no Gradle, mas são bem-sucedidos no IDE

A instalação do Nuget sempre falha após a instalação bem-sucedida

Driver Datastax Cassandra PHP: Como saber se CQL INSERT, UPDATE, DELETE são bem-sucedidos

Os testes de Karma são bem-sucedidos, mas o PhantomJS retorna "Um erro foi lançado em afterAll" SyntaxError: Token inesperado ','

Os ponteiros C ++ são alocados no mesmo endereço sempre que são alocados recentemente?

GitLab: a assinatura RPM falha mesmo após importação e adição bem-sucedidas

Os envios de formulários do Netlify "bem-sucedidos" não aparecem no painel

Os DAGs do Airflow são bem-sucedidos, mas as tarefas não estão em execução

Os DAGs do Airflow são bem-sucedidos, mas as tarefas não estão em execução

Upload de arquivos no Fine-Uploader, falha ao combinar / mesclar pedaços após o upload bem-sucedido

Devise omniauth está redirecionando para o método de falha no controlador de retorno de chamada, mesmo após a autenticação bem-sucedida.

A vinculação de contas está falhando para o Google Actions após um código de autenticação e token de acesso bem-sucedidos

Tarefa Azure DevOps, Release Pipeline, Powershell: Extração de .tar.gz mostrado como falha mesmo após a operação ser bem-sucedida

Por que os retornos de chamada são mais "fortemente acoplados" do que as promessas?

NextJS - o build falha mesmo que o dev execute bem, reclamando dos React Hooks onde não os estou usando

Por que os retornos de chamada dos métodos `.then` da promessa são um antipadrão

Por que os retornos de chamada dos métodos `.then` da promessa são um antipadrão

Os eventos JavaScript são sempre executados, mesmo que ninguém esteja ouvindo?

TOP lista

  1. 1

    R Shiny: use HTML em funções (como textInput, checkboxGroupInput)

  2. 2

    UITextView não está exibindo texto longo

  3. 3

    Dependência circular de diálogo personalizado

  4. 4

    Acessando relatório de campanhas na AdMob usando a API do Adsense

  5. 5

    Como assinar digitalmente um documento PDF com assinatura e texto visíveis usando Java

  6. 6

    R Folheto. Dados de pontos de grupo em células para resumir muitos pontos de dados

  7. 7

    Setas rotuladas horizontais apontando para uma linha vertical

  8. 8

    O Chromium e o Firefox exibem as cores de maneira diferente e não sei qual deles está fazendo certo

  9. 9

    Definir um clipe em uma trama nascida no mar

  10. 10

    Por que meus intervalos de confiança de 95% da minha regressão multivariada estão sendo plotados como uma linha de loess?

  11. 11

    Como dinamizar um Dataframe do pandas em Python?

  12. 12

    regex para destacar novos caracteres de linha no início e no fim

  13. 13

    Why isn't my C# .Net Core Rest API route finding my method?

  14. 14

    Como obter a entrada de trás de diálogo em treeview pyqt5 python 3

  15. 15

    Tabela CSS: barra de rolagem para a primeira coluna e largura automática para a coluna restante

  16. 16

    How to create dynamic navigation menu select from database using Codeigniter?

  17. 17

    Como recuperar parâmetros de entrada usando C #?

  18. 18

    Changing long, lat values of Polygon coordinates in python

  19. 19

    Livros sobre criptografia do muito básico ao muito avançado

  20. 20

    Método \ "POST \" não permitido no framework Django rest com ações extras & ModelViewset

  21. 21

    Pesquisa classificada, conte números abaixo do valor desejado

quentelabel

Arquivo