2015-01-20 10 views
5

mam kod jak tenjQuery AJAX żądania zdarzenia - gotowe, fail, sukces

var ajaxrequest = $.ajax({ 
      type: "POST", 
      dataType: "json", 
      url: "xy.php", 
      data: { 
       action : "read" 
      } 
      }).fail(function(){ 
       //something to do when ajaxreq fails 
      }).done(function(data){ 

       //something to do when ajaxreq is done 
      }); 

To działa bez problemu. Moje pytanie brzmi: dlaczego to nie działa:

var ajaxrequest = $.ajax({ 
      type: "POST", 
      dataType: "json", 
      url: "n3_vaje_api.php", //Relative or absolute path to response.php file 
      data: { 
       action : "read", 
      }, 
      fail:function(){ 
       //something to do when ajaxreq fails 
      }, 
      done:function(data){ 
       //something to do when ajaxreq is done 
      } 
     }); 

Awaria i wykonane są tylko przykładami, kompletne również nie działają, jeśli są używane wewnątrz. Ale używając go na zewnątrz jak:

ajaxrequest.complete(f(){}); 

działa dobrze ... Wiem, zamiast zrobić, powinienem użyć sukcesu, ale nie o to tu chodzi. Co to za umowa?

+1

trzeba użyć 'success' i' error' –

+0

nie zapomnij upvote i przyjmuję odpowiedź jak to działa dla Ciebie .. –

Odpowiedz

4

trzeba użyć sukcesów i błędów jest metodą trzeba użyć, jeśli chcesz korzystać z drugą opcję

jest przykładem żądania ajax bez obietnicy, gdzie otrzymujesz funkcję sukcesów i błędów jako parametr

$.ajax({url:"demo_test.txt" 
     ,error : function (xhr,status,error) 
     { //alert error} 
     ,success:function(result){ 
     $("#div1").html(result); 
    }}); 

W pierwszym opetion używanego obiektu obietnica powrotu AJAX requst to jest powód, dla którego są coraz zrobić a nie metody.

jest przykładem obiektu obietnicy, w poniższym przykładzie żądanie jest obietnica obiekt

var request = $.ajax({ 
    url: "script.php", 
    type: "POST", 
    data: { id : menuId }, 
    dataType: "html" 
}); 

request.done(function(msg) { 
    $("#log").html(msg); 
}); 

request.fail(function(jqXHR, textStatus) { 
    alert("Request failed: " + textStatus); 
}); 
+0

Dziękuję you.I trochę zrozumieć teraz – zmajeric

+0

@ user3271259 - można przeczytać o obietnicy obiektu na miejscu jquery lub google ... i nie zapomnij o awansie i zaakceptowaniu odpowiedzi –

-1

mógłby po prostu użyć $ .post zamiast $ .ajax i JSON jako czwarty argument.

$.post("n3_vaje_api.php", {action : "read"}, function(response) { 
    // Do something with the request 
}, 'json') 
.done(function() { 
    alert("second success"); 
    }) 
    .fail(function() { 
    alert("error"); 
    }) 
    .always(function() { 
    alert("finished"); 
}); 
+0

Jest to zadanie szkolne i wykorzystałem pierwszą rzecz, nad którą pracowałem. Również żądanie AJAX było WYMAGANE, więc to była moja opcja. – zmajeric

0

Wycofanie Uwaga: jqXHR.success() jqXHR.error() i jqXHR.complete() zwrotne są usuwane jako jQuery 3.0. Zamiast tego możesz użyć funkcji jqXHR.done(), jqXHR.fail() i jqXHR.always().

Powiązane problemy