2012-10-10 13 views
49

Ciekawy, jeśli ktoś wie, co to jest różnica w odniesieniu do parametru danych.

Mam metodę $.post, która przyjmuje $('#myform').serialize() jako mój parametr danych i działa.

Jeśli spróbuję tego samego przy użyciu podejścia $.ajax(), 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?

+1

podobne http://stackoverflow.com/questions/7528757/post-vs-ajax – Techie

+4

RTFM - http://api.jquery.com/jQuery.post/ –

Odpowiedz

14

Po ponownym zapoznaniu się z dokumentacją online postanowiłem 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 co skończyło się

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

Ten wpis będzie dla Ciebie pomocny.

Forum Link

W krótkim czynności:

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

jest równoznaczne z:

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

Problemem tutaj nie jest fakt $.ajax() nie działa, to dlatego, że nie ustawione parametr typu w żądaniu Ajax i domyślnie przyjmuje żą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 jest tylko rozmowa z $.ajax(), tylko z zestawem type. Przeczytaj docs, a zobaczysz, że $.ajax() domyślnie jest GETem, jak wspomniałem powyżej.

Jeśli pójdziesz do strony jQuery.post w docs jQuery to pokazuje $ .ajax żądania z zestawem typu. Ponownie przeczytaj dokumenty.

10

Podajesz to jako parametr danych. $.post jest tylko skrótem dla $.ajax, który oczekuje następujących.

-3

W $.ajax jesteś w stanie zsynchronizować, ale nie jest to możliwe w funkcji $.post. 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); 
+4

To nieprawda. Możesz uzyskać zwrócony wynik przez: ' $ .post ("your.php", funkcja (dane) {_reference ** dane ** jako zwracany wynik_}) ' – blurgoon

+0

n gaking, jest to absolutnie niepoprawna informacja i nie powinna zawierać żadnych notacji. $ .ajax, $ .post i $ .get mogą WSZYSTKIE zwrócić wyniki. –

+0

@EdDeGagne Nie możesz uzyskać odpowiedzi zwrotnej poza funkcją postu – nagaking

2

Podobnie jak komplementarne, w przyjętym odpowiedź, to wymieniono że "dane param na $ .ajax metody badaniem robi coś innego niż $.Metoda POST robi, nie wiem co dokładnie, ale istnieje różnica "

proszę spróbować użyć.

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

Else JSON obiekt get włożona ładowności jako Zakodowany ciąg znaków