76 votes

Comment puis-je renvoyer un message de réussite/d'erreur approprié pour JQuery .ajax() en utilisant PHP ?

Je reçois toujours l'alerte d'erreur. Il n'y a rien de mal avec la partie MYSQL, la requête est exécutée et je peux voir les adresses e-mail dans la base de données.

Côté client :

 <script type="text/javascript">
  $(function() {
    $("form#subsribe_form").submit(function() {
      var email = $("#email").val();

      $.ajax({
        url: "subscribe.php",
        type: "POST",
        data: {email: email},
        dataType: "json",
        success: function() {
          alert("Thank you for subscribing!");
        },
        error: function() {
          alert("There was an error. Try again please!");
        }
      });
      return false;
    });
  });
</script>

Côté serveur :

 <?php 
$user="username";
$password="password";
$database="database";

mysql_connect(localhost,$user,$password);
mysql_select_db($database) or die( "Unable to select database");

$senderEmail = isset( $_POST['email'] ) ? preg_replace( "/[^\.\-\_\@a-zA-Z0-9]/", "", $_POST['email'] ) : "";

if($senderEmail != "")
    $query = "INSERT INTO participants(col1 , col2) VALUES (CURDATE(),'".$senderEmail."')";
mysql_query($query);
mysql_close();

$response_array['status'] = 'success';    

echo json_encode($response_array);
?>

128voto

Muhammad Abrar Points 924

Vous devez fournir le bon type de contenu si vous utilisez JSON dataType. Avant de faire écho au json, mettez le bon en-tête.

 <?php    
    header('Content-type: application/json');
    echo json_encode($response_array);
?>

Correctif supplémentaire, vous devez vérifier si la requête réussit ou non.

 if(mysql_query($query)){
    $response_array['status'] = 'success';  
}else {
    $response_array['status'] = 'error';  
}

Côté client :

 success: function(data) {
    if(data.status == 'success'){
        alert("Thank you for subscribing!");
    }else if(data.status == 'error'){
        alert("Error on query!");
    }
},

J'espère que ça aide.

33voto

w0rldart Points 2547

Juste pour que vous le sachiez, vous pouvez l'utiliser pour le débogage. Cela m'a beaucoup aidé, et le fait toujours

 error:function(x,e) {
    if (x.status==0) {
        alert('You are offline!!\n Please Check Your Network.');
    } else if(x.status==404) {
        alert('Requested URL not found.');
    } else if(x.status==500) {
        alert('Internel Server Error.');
    } else if(e=='parsererror') {
        alert('Error.\nParsing JSON Request failed.');
    } else if(e=='timeout'){
        alert('Request Time out.');
    } else {
        alert('Unknow Error.\n'+x.responseText);
    }
}

1voto

larachiwnl Points 236

Du côté serveur:

 if (mysql_query($query)) {
    // ...
}
else {
    ajaxError(); 
}

Côté client:

 error: function() {
    alert("There was an error. Try again please!");
},
success: function(){
    alert("Thank you for subscribing!");
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X