Eșecul funcției Ajax Success și Error (Programare, Jquery, Ajax)

michael a intrebat.

Am probleme în a face ca jQuery ajax-ul meu să funcționeze corect. Acesta direcționează către pagina PHP pentru a actualiza baza de date, dar nu se întoarce niciodată înapoi la script pentru opțiunile de succes sau eroare.

Codul meu este mai jos:

$(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;  
        });  
});

Și PHP-ul:

<?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(); 
?>

Comentarii

  • Ce se întâmplă dacă puneți un alert() în prima linie a fișierului success funcției callback? success: function(){ alert('foobar');... –  > Por Jasper.
  • Ar părea logic să furnizați și codul php. Aveți un ecou de răspuns? –  > Por Kai Qing.
  • Iată codul 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(); ?> –  > Por michael.
  • Jasper: Succesul meu nu rulează niciodată, deoarece pagina PHP nu se întoarce niciodată la javascript. –  > Por michael.
  • Ai fi primit un răspuns mai repede dacă ai fi pus php în întrebare (și ai fi formatat lizibil) –  > Por Justin Kyle Parton.
8 răspunsuri
Matt Bradley

Încearcă asta:

$.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); 
    }       
});

The beforeSend este setată la function() { textreplace(description); } în loc de textreplace(description). Adresa beforeSend are nevoie de o funcție.

Comentarii

  • Am schimbat această parte, dar tot nu se întoarce la funcție. Vă mulțumesc pentru încercare. –  > Por michael.
Max

De asemenea, se poate folosi și următorul lucru pentru a prinde erorile:

$.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');
});

Stacy Drennan

Am avut aceeași problemă și am rezolvat-o prin simpla adăugare a unei linii dataType = „text” la apelul meu ajax. Faceți ca dataType să se potrivească cu răspunsul pe care vă așteptați să îl primiți înapoi de la server (mesajul de eroare „insert successful” sau „something went wrong”).

Mian

Puteți implementa logica specifică erorilor după cum urmează:

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

Robert Greene

Aceasta poate fi o postare veche, dar mi-am dat seama că nu există nimic care să fie returnat de la php și funcția dvs. de succes nu are intrare ca în cele ce urmează, success:function(e){}. Sper că vă ajută.

dinjas

S-ar putea să nu-ți rezolve toate problemele, dar variabila pe care o folosești în interiorul funcției tale (text) nu este aceeași cu parametrul pe care îl treci (x).

Schimbare:

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

În:

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

pare că ar fi de folos.

user3214937

Trimiți un tip de post cu date implementate pentru un get.formularul tău trebuie să fie următorul:

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

Alifur Rahman
 $.ajax({
         type:'POST',
         url: 'ajaxRequest.php',
         data:{
         userEmail : userEmail
         },
         success:function(data){
         if(data == "error"){
                $('#ShowError').show().text("Email dosen't Match ");
                $('#ShowSuccess').hide();
               }
               else{
                 $('#ShowSuccess').show().text(data);
                }
              }
            });

Tags:,