Odpowiedzi:
contentTypeto nagłówek HTTP wysłany do serwera, określający określony format. dataTypeczy mówisz jQuery, jakiej odpowiedzi możesz się spodziewać. $.ajax()Dokumentacja ma pełne opisy tych również.
W danym przypadku, pierwszy prosi dla odpowiedź będzie w UTF-8drugi nie obchodzi. Również pierwsza traktuje odpowiedź jako obiekt JavaScript, a druga traktuje ją jako ciąg.
Więc pierwsze byłoby:
success: function(data) {
// get data, e.g. data.title;
}
Drugi:
success: function(data) {
alert("Here's lots of data, just a string: " + data);
}
dataType = ""?
(ps: odpowiedź udzielona przez Nicka Cravera jest nieprawidłowa)
contentType określa format danych wysyłanych do serwera w ramach żądania (można je przesłać również w ramach odpowiedzi, o czym później).
dataType określa oczekiwany format danych, które mają być odbierane przez klienta (przeglądarkę).
Obie nie są wymienne.
contentTypeto nagłówek wysyłany do serwera, określający format danych (tj. treść wiadomości) trafiających na serwer. Jest to używane z żądaniami POST i PUT. Zwykle, gdy wysyłasz żądanie POST, treść wiadomości składa się z przekazanych parametrów, takich jak:==============================
Prośba o próbkę:
POST /search HTTP/1.1
Content-Type: application/x-www-form-urlencoded
<<other header>>
name=sam&age=35
==============================
Ostatni wiersz powyżej „name = sam & age = 35” to treść wiadomości, a contentType określa ją jako application / x-www-form-urlencoded, ponieważ przekazujemy parametry formularza w treści wiadomości. Nie ograniczamy się jednak tylko do wysyłania parametrów, możemy wysyłać json, xml, ... w ten sposób (wysyłanie różnych typów danych jest szczególnie przydatne w przypadku usług internetowych RESTful):
==============================
Prośba o próbkę:
POST /orders HTTP/1.1
Content-Type: application/xml
<<other header>>
<order>
<total>$199.02</total>
<date>December 22, 2008 06:56</date>
...
</order>
==============================
Więc tym razem ContentType to: application / xml, bo to właśnie wysyłamy. Powyższe przykłady pokazały przykładowe żądanie, podobnie odpowiedź wysłana z serwera może mieć również nagłówek Content-Type określający, co serwer wysyła w następujący sposób:
==============================
przykładowa odpowiedź:
HTTP/1.1 201 Created
Content-Type: application/xml
<<other headers>>
<order id="233">
<link rel="self" href="http://example.com/orders/133"/>
<total>$199.02</total>
<date>December 22, 2008 06:56</date>
...
</order>
==============================
dataTypeokreśla oczekiwany format odpowiedzi. Jest to związane z nagłówkiem Accept. JQuery spróbuje to wywnioskować na podstawie typu treści odpowiedzi.==============================
Prośba o próbkę:
GET /someFolder/index.html HTTP/1.1
Host: mysite.org
Accept: application/xml
<<other headers>>
==============================
Powyższe żądanie oczekuje XML z serwera.
Jeśli chodzi o twoje pytanie,
contentType: "application/json; charset=utf-8",
dataType: "json",
Tutaj wysyłasz dane json przy użyciu zestawu znaków UTF8 i oczekujesz zwrotnych danych json z serwera. Zgodnie z dokumentacją JQuery dla typu dataType,
Typ json analizuje pobrany plik danych jako obiekt JavaScript i zwraca skonstruowany obiekt jako dane wynikowe.
Więc to, co otrzymujesz w programie obsługi sukcesu, to odpowiedni obiekt javascript (JQuery konwertuje obiekt json za Ciebie)
natomiast
contentType: "application/json",
dataType: "text",
Tutaj wysyłasz dane json, ponieważ nie wspomniałeś o kodowaniu, zgodnie z dokumentacją JQuery,
Jeśli nie określono zestawu znaków, dane będą przesyłane na serwer przy użyciu domyślnego zestawu znaków serwera; musisz to odpowiednio zdekodować po stronie serwera.
a ponieważ dataType jest określona jako tekst, w programie obsługi sukcesu otrzymujesz zwykły tekst, zgodnie z dokumentacją dla dataType,
Typy text i xml zwracają dane bez przetwarzania. Dane są po prostu przekazywane do programu obsługującego sukces
zgodnie z dokumentami :
"json": Ocenia odpowiedź jako JSON i zwraca obiekt JavaScript. W jQuery 1.4 dane JSON są analizowane w ścisły sposób; każdy źle sformułowany kod JSON jest odrzucany i generowany jest błąd analizy. (Więcej informacji na temat prawidłowego formatowania JSON można znaleźć w witrynie json.org)."text": Zwykły ciąg tekstowy.Moduł ładujący jQuery Ajax nie działa dobrze, gdy wywołujesz jednocześnie dwa interfejsy API. Aby rozwiązać ten problem, musisz wywoływać interfejsy API jeden po drugim, używając isAsyncwłaściwości w ustawieniu Ajax. Musisz również upewnić się, że nie powinno być żadnych błędów w ustawieniach. W przeciwnym razie ładowarka nie będzie działać. Np. Niezdefiniowany typ zawartości, typ danych dla wywołania POST / PUT / DELETE / GET.