2012-01-18 9 views
19

Mam problem z poprawnym działaniem mojego ajaxu jQuery. Kieruje do strony PHP, aby zaktualizować bazę danych, ale nigdy nie wraca do skryptu w celu uzyskania sukcesu lub opcji błędu.Awaria funkcji Ajax Success and Error

Moje kodu jest poniżej:

$(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:

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

Co stanie się, jeśli umieścisz 'alert()' w pierwszym wierszu funkcji zwrotnej 'success'? 'success: function() {alert ('foobar'); ...' – Jasper

+0

Wydaje się logiczne, że podajesz również kod php. Czy echo odpowiedź? –

+0

Oto PHP: ' ' – michael

Odpowiedz

48

Spróbuj tego:

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

Obiekt beforeSend jest ustawiony na function() { textreplace(description); } zamiast textreplace(description). Właściwość beforeSend potrzebuje funkcji.

+0

Zmieniłem tę część, ale nadal nie wraca ona do funkcji. Dziękuję za próbę. – michael

0

Może to nie rozwiąże wszystkich problemów, ale zmienna, której używasz w swojej funkcji (tekst), nie jest tym samym, co parametr, który przekazujesz (x).

Zmiana:

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

Do:

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

wydaje się, że to coś dobrego.

3

można zaimplementować logiki błędu specyficzny sposób następujący:

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

To może być stary post, ale zdałem sobie sprawę, nic nie zostać zwrócone z php i czynność sukces nie posiada wejście jak w następujący sposób , success:function(e){}. Mam nadzieję, że ci to pomoże.

4

One mogą również korzystać z następujących czynności, aby złapać błędy:

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

miałem ten sam problem i naprawić go po prostu przez dodanie dataType = linia „text” na moje wezwanie ajax. Upewnij się, że dataType odpowiada odpowiedzi, jakiej oczekujesz od serwera (komunikat "Wstaw powodzenie" lub "coś poszło nie tak").

0

Wysyłasz typ wiadomości z danymi zaimplementowanymi w przypadku otrzymania. Twój formularz musi być następujący:

$.ajax({ 
url: url, 
method: "POST", 
data: {data1:"data1",data2:"data2"}, 
... 
Powiązane problemy