web-dev-qa-db-fra.com

Échec de la fonction de réussite et d'erreur Ajax

Je ne parviens pas à faire fonctionner mon jQuery ajax correctement. Il renvoie à la page PHP pour mettre à jour la base de données, mais ne renvoie jamais au script pour les options de réussite ou d'erreur.

Mon code est ci-dessous:

$(document).ready(function(){  
        $("form#updatejob").submit(function() {  
            function textreplace(x) {return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");}
            // we want to store the values from the form input box, then send via ajax below
            var job     = $("#job").attr("value");
            var description     = $("#description").val();
            description.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
            var startDate   = $("#startDate").attr("value");
            var releaseDate = $("#releaseDate").attr("value");  
            var status  = $("#status").attr("value"); 
            $.ajax({
                beforeSend:textreplace(description),
                type: "POST",  
                url: "updatedjob.php",
                data: "jobID="+ job +"& description="+ description +"& startDate="+ startDate +"& releaseDate="+ releaseDate +"& status="+ status, 
                success: function(){  
                    $("form#updatejob").hide(function(){$("div.success").fadeIn();});  
                },
                error: function(XMLHttpRequest, textStatus, errorThrown) { 
                    alert("Status: " + textStatus); alert("Error: " + errorThrown); 
                }       
            });
            return false;  
        });  
});

Et le PHP:

<?php 
    include("connect.php"); 
    $job = trim($_POST['job']); 
    $startDate = trim($_POST['startDate']); 
    $releaseDate = trim($_POST['releaseDate']); 
    $mysqlstartdate = date('Y-m-d', strtotime($startDate)); 
    $mysqlreleasedate = date('Y-m-d', strtotime($releaseDate)); 
    $description = trim($_POST['description']); 
    $status = trim($_POST['status']); 
    $update = "UPDATE jobs SET startDate = '$mysqlstartdate', releaseDate = '$mysqlreleasedate', description = '$description', status = '$status' WHERE jobID = '$job' "; 
    $rsUpdate = mysql_query($update);
// or die(mysql_error()); mysql_close(); 
?>
29
michael

Essaye ça:

$.ajax({
    beforeSend: function() { textreplace(description); },
    type: "POST",  
    url: "updatedjob.php",
    data: "jobID="+ job +"& description="+ description +"& startDate="+ startDate +"& releaseDate="+ releaseDate +"& status="+ status, 
    success: function(){  
        $("form#updatejob").hide(function(){$("div.success").fadeIn();});  
    },
    error: function(XMLHttpRequest, textStatus, errorThrown) { 
        alert("Status: " + textStatus); alert("Error: " + errorThrown); 
    }       
});

La propriété beforeSend est définie sur function() { textreplace(description); } au lieu de textreplace(description). La propriété beforeSend nécessite une fonction.

59
Matt Bradley

On peut aussi utiliser ce qui suit pour attraper les erreurs:

$.ajax({
    url: url, 
    success: function (data) {
        // Handle success here
        $('#editor-content-container').html(data);
        $('#editor-container').modal('show');
    },
    cache: false
}).fail(function (jqXHR, textStatus, error) {
    // Handle error here
    $('#editor-content-container').html(jqXHR.responseText);
    $('#editor-container').modal('show');
});
8
Max

J'avais le même problème et je l'ai corrigé en ajoutant simplement une ligne dataType = "text" à mon appel ajax. Faites en sorte que le type de données corresponde à la réponse attendue du serveur (votre message d'erreur "insertion réussie" ou "problème rencontré").

5
Stacy Drennan

Vous pouvez implémenter une logique spécifique à l'erreur comme suit: 

error: function (XMLHttpRequest, textStatus, errorThrown) {
    if (textStatus == 'Unauthorized') {
        alert('custom message. Error: ' + errorThrown);
    } else {
        alert('custom message. Error: ' + errorThrown);
    }
}
4
Mian

C’est peut-être un vieux post, mais j’ai réalisé qu’il n’y avait rien à renvoyer du php et que votre fonction de réussite n’a pas d’entrée comme suit, success:function(e){}. J'espère que ça vous aide.

2
Robert Greene

Vous envoyez un type de message avec les données implémentées pour un get . Votre formulaire doit être le suivant:

$.ajax({
url: url,
method: "POST",
data: {data1:"data1",data2:"data2"},
...
0
user3214937

Cela ne résoudra peut-être pas tous vos problèmes, mais la variable que vous utilisez dans votre fonction (texte) n'est pas identique au paramètre que vous transmettez (x).

En changeant:

function textreplace(x) {
    return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
}

À:

function textreplace(text) {
    return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
}

semble que cela ferait du bien.

0
dinjas