2014-04-06 13 views
13

Używam postu Ajax do przesyłania danych formularza na serwer, sprawdzania poprawności, a następnie zwracania wiadomości na podstawie tego, czy dane były prawidłowe i czy mogły być przechowywane. Moja funkcja sukcesu w moim poście ajax nie działa jednak. Oto posta ajax i wyświetlenie komunikatu o powodzeniu:Funkcja sukcesu Ajaxa

jQuery.ajax({   
    type:"post", 
    dataType:"json", 
    url: myAjax.ajaxurl, 
    data: {action: 'submit_data', info: info}, 
    success: function(data) { 
     successmessage = 'Data was succesfully captured'; 
    } 
}); 

$("label#successmessage").text(successmessage); 
$(":input").val(''); 
return false; 

Na etykiecie nie jest jednak wyświetlana żadna wiadomość. Próbowałem ustawić zmienną successmessage na wartość ustawioną w kodzie i było wyświetlane poprawnie, więc musi być coś nie tak z moją funkcją sukcesu, po prostu nie widzę co? Próbowałem również ustawić wywołanie zwrotne błędu w następujący sposób:

error: function(data) {    
    successmessage = 'Error'; 
}, 

Ale nadal nie wyświetla się żadna wiadomość.

+1

możliwe duplikat [Jak zwrócić odpowiedź z wywołania AJAX?] (Http://stackoverflow.com/questions/14220321/how-to-return-the-response-from-an-ajax- zadzwoń) – Quentin

+0

"Funkcja mojego sukcesu w moim poście ajaxowym nie działa jednak" Sprawdź w swojej karcie sieciowej pod kątem błędu –

+0

Po sprawdzeniu karty sieciowej, wiadomość o uruchomieniu OK – Mikey

Odpowiedz

18

To dlatego, że Ajax jest asynchroniczny, funkcja success lub error zostanie wywołana później, gdy serwer odbierze klienta. Tak, po prostu przenieść części w zależności od wyniku w swojej funkcji sukcesu tak:

jQuery.ajax({ 

      type:"post", 
      dataType:"json", 
      url: myAjax.ajaxurl, 
      data: {action: 'submit_data', info: info}, 
      success: function(data) { 
       successmessage = 'Data was succesfully captured'; 
       $("label#successmessage").text(successmessage); 
      }, 
      error: function(data) { 
       successmessage = 'Error'; 
       $("label#successmessage").text(successmessage); 
      }, 
     }); 

     $(":input").val(''); 
     return false; 
0

Odpowiedź podana powyżej nie może rozwiązać mój problem.So zmienić asynchroniczny na false, aby uzyskać komunikat ostrzegawczy.

jQuery.ajax({ 
      type:"post", 
      dataType:"json", 
      async: false, 
      url: myAjax.ajaxurl, 
      data: {action: 'submit_data', info: info}, 
      success: function(data) { 
       alert("Data was succesfully captured"); 
      }, 
     }); 
Powiązane problemy