Pytanie Różnica między $ .post a $ .ajax?


Ciekawe, jeśli ktoś wie, jaka jest różnica w odniesieniu do parametru danych.

mam $.post metoda, która wymaga $('#myform').serialize() jako mój parametr danych i działa.

Jeśli spróbuję tego samego używając $.ajax() podejście to nie działa, ponieważ mój parametr danych nie wydaje się poprawny.

Czy ktoś wie różnicę i co mogę użyć zamiast powyższego .serialize?


51
2017-10-10 13:06


pochodzenie


podobny stackoverflow.com/questions/7528757/post-vs-ajax - Techie


Odpowiedzi:


Ten post będzie dla Ciebie pomocny.

Link do forum

Krótko mówiąc:

$.post( "/ajax", {"data" : json }) 

Jest równa :

$.ajax({ 
  type: "POST", 
  url: "/ajax", 
  data: {"data": json} 
}); 

62
2017-10-10 13:07





Problem tutaj nie jest faktem $.ajax() nie działa, ponieważ nie ustawiłeś parametru typu w żądaniu Ajax i domyślnie jest to żądanie GET. Dane są wysyłane przez ciąg zapytania dla get, a jeśli twój backend oczekuje ich jako parametrów postu, to ich nie odczyta.

$.post to tylko połączenie z $.ajax(), właśnie z type zestaw. Przeczytać docs a zobaczysz to $.ajax() domyślnie GET, jak wspomniałem powyżej.

Jeśli pójdziesz do jQuery.post strona w dokumentach jQuery pokazuje żądanie $ .ajax z ustawionym typem. Ponownie przeczytaj dokumenty.


43
2017-10-10 13:08





Po ponownym przeczytaniu dokumentacji online zdecydowałem się trzymać $ .post na $ .ajax.

Parametr danych metody $ .ajax robi coś innego niż metoda $ .post, nie wiem co dokładnie, ale jest różnica.

Jedynym powodem, dla którego chciałem użyć $ .ajax jest to, że chciałem być w stanie obsłużyć zdarzenia i nie zdawałem sobie sprawy, że mogę to zrobić za pomocą $ .post.

Oto, w czym skończyłem

function GetSearchItems() {
    var url = '@Url.Action("GetShopSearchResults", "Shop", New With {.area = "Shop"})';
    var data = $("#ShopPane").serialize();
    // Clear container
    $('#shopResultsContainer').html('');
    // Retrieve data from action method
    var jqxhr = $.post(url, data);
    // Handle results
    jqxhr.success(function (result) {
        //alert("ajax success");
        $('#shopResultsContainer').html(result.ViewMarkup);
    });
    jqxhr.error(function () {
        //alert("ajax error");
    });
    jqxhr.complete(function () {
        //alert("ajax complete");
    });

    // Show results container
    $("#shopResultsContainer").slideDown('slow');
}

15
2017-10-10 13:47





Czy określasz to jako parametr danych. $.post jest tylko skrótem dla $.ajax który oczekuje następujących rzeczy.

$.ajax({
    type : 'POST',
    url : url,
    data : data,
    success : success,
    dataType : dataType
});

11
2017-10-10 13:11





Podobnie jak w uzupełnieniu, w przyjętej odpowiedzi wspomina się, że "Parametr danych metody $ .ajax robi coś innego niż metoda $ .post, nie wiem co dokładnie, ale jest różnica"

spróbuj użyć:

    { 
        ... 
        data: JSON.stringify(yourJsonData), 
        ... 
    }

W przeciwnym razie obiekt json zostanie wstawiony do ładunku jako łańcuch zakodowany w url.


2
2018-04-12 20:51





W $.ajax jesteś w stanie synchronizować, ale nie jest to możliwe w $.post funkcjonować. Synchronizacja oznacza, że ​​możesz uzyskać zwrócony wynik.

var tmp;
$.ajax({
    'async': false,
    'type': "POST",
    'global': false,
    'dataType': 'html',
    'url': "Your Url",
    'data': {'type': 'data'},
    'success': function (data) {
        tmp = data;
    }
});
alert(tmp);

-3
2017-09-24 11:23



To nieprawda. Możesz uzyskać zwrócony wynik poprzez: $.post ("your.php", function(data) { _reference **data** as your returned result_ }) - blurgoon
nagaking, jest to absolutnie niepoprawna informacja i nie powinna zawierać żadnych pobudek. $ .ajax, $ .post i $ .get mogą WSZYSTKIE zwrócić wyniki. - Ed DeGagne
@EdDeGagne Nie możesz uzyskać odpowiedzi zwrotnej poza funkcją postu - nagaking
Opcja Async została wycofana z tego, co widziałem, aby uzyskać wynik połączenia ajax, istnieją lepsze sposoby, które nie zostawiają nas z przeglądarką, która może okazać się nie odpowiadać. Podobnie jak przy użyciu oddzwaniania powodzenia. - Nmaster88