2011-02-03 10 views
10

Właśnie zaktualizowałem wersję 1.4 do wersji 1.5 jQuery, a teraz moje wywołania AJAX zawsze kończą się niepowodzeniem z błędem "nieprawidłowej etykiety".jQuery 1.5 wywołanie AJAX kończy się niepowodzeniem z "nieprawidłową etykietą" dla żądań JSON

Przykładem prośba brzmi:

jQuery.ajax({ 
    async: false 
    , dataType: "json" 
    , error: function (xhr, status, error) { ... } 
    , success: function (data, status, xhr) { ... } 
    , type: "post" 
    , url: "ajax/request.asp" 
}); 

W sieci znalazłem ten błąd jest podniesiona, gdy wrócił JSON nie jest opatrywana zwrotnego jQuery (np jQuery1234({ "something": "abcd" })

Problemem jest to wracam. JSON, a nie JSONP (i podaję to w żądaniu AJAX), dlaczego więc muszę określić wywołanie zwrotne w zwróconym JSON?

1.5 changelog nic nie mówi o tym ... (Albo to ja, kto nie może czytaj?)

Aktualizacja:

Jest przykładem JSON nie pracuje:

{ 
    "esito":"Ok", 
    "centriCosto":[ 
     { 
     "id":"1", 
     "descrizione":"Colazione" 
     }, 
     { 
     "id":"2", 
     "descrizione":"Pranzo" 
     }, 
     { 
     "id":"3", 
     "descrizione":"Cena" 
     } 
    ] 
} 

I to jest ta sama zwrotna owinięte pracy JSON:

jQuery1502710949228847014_1296739130498({ 
    "esito":"Ok", 
    "centriCosto":[ 
     { 
     "id":"1", 
     "descrizione":"Colazione" 
     }, 
     { 
     "id":"2", 
     "descrizione":"Pranzo" 
     }, 
     { 
     "id":"3", 
     "descrizione":"Cena" 
     } 
    ] 
}) 

Nawiasem mówiąc, Firebug mówi, że oba z nich są poprawnymi JSONami (i jest bardzo wrażliwy na poprawność).

+0

To może być problem z samym json, zauważyłem, że od 1,4 JQ była znacznie bardziej rygorystyczne o strukturze JSON. Mój pierwszy projekt JSON z '07 zaczął się nie udać, kiedy uaktualniłem swój JQ, otworzyłem wyjściowy JSON i miałem wrażenie, jak kiepsko go skomponowałem. Czy możesz opublikować JSON? – picus

+0

@picus: Nie, poprawiam mój JSON przeciwko wielu walidatorów i jest w porządku. Jeśli zaimplementuję wywołanie zwrotne JSONP, zacznie działać ponownie, więc nie ma problemu z formatem. – Albireo

+0

@picus: Dodałem przykład nie działającego i działającego JSON. – Albireo

Odpowiedz

28

Ok, dowiedziałem się, co się dzieje.

jQuery's Validation plug-in nie jest kompatybilny z jQuery 1.5 (patrz one i two), usuwając wydajność wtyczek do właściwego zachowania.

Jeśli ktoś ma ten problem, istnieje łata w repozytorium wtyczek w za: link

+0

Dzięki za udostępnienie linku. Uratowałeś mój dzień! –

+0

Mój współpracownik właśnie spędził ostatnią godzinę próbując znaleźć podobny problem. Uaktualniliśmy to do wersji 1.6 i nie ma już konfliktu z wtyczką do sprawdzania poprawności. Dzięki. –

1

try: Czy szybkie wyszukiwanie dla json w jQuery 1.5.js i znalazłem to na rzędu 6905:

// Detekcja możliwości normalizacji i zainstalować zwrotnych dla jsonp żąda

jQuery.ajaxPrefilter("json jsonp", function(s, originalSettings, dataIsString /* internal */) { 

usunięcie "json" od pierwszego argumentu doda prawidłowego zachowania podczas spec. dataType:"json"

5

I rzeczywiście wpadł na podobny problem, ale wydaje się być związane z tym błędem: http://bugs.jquery.com/ticket/8398

niekoniecznie jest to związane z jQuery validate i zajęło mi trochę czasu, aby zrozumieć rzeczy. Okazuje się, że jQuery 1.5 modyfikuje kolejne wywołania ajax dla json na jsonp, co prowadzi do tego błędu.

Naprawiłem go, wykonując jedną z sugerowanych obejścia w historii zmian bug i umieszczając poniższy kod gdzieś przed dokonaniem moje ajax połączeń:

$.ajaxSetup({ 
    jsonp: null, 
    jsonpCallback: null 
}); 

powinno rozwiązać wszelkie problemy dla innych żądań AJAX zbyt.

1

Jeśli twój kod po stronie serwera polega na nazwie zwrotnej zaczynającej się na "jsonp", możesz mieć problem. Prefiks nazwy wywołania zwrotnego został zmieniony na "jQuery" w wersji 1.5.

1

wygląda tak, jak to zostało naprawione w wersji 1.6 - po aktualizacji do wersji 1.5.1 & po wydaniu wersji 1.6 problem zniknął.

2

Oto możliwe obejście tego problemu z wtyczką sprawdzania poprawności.

dataType: "json tekst"

działa jak czar. Nie pytaj mnie dlaczego. W chrome, możesz zobaczyć błąd składni jquery parsujący ":" w powrocie json. I nie popełnij błędu, powrót jest ważny. Nie próbowałem tego, ale podejrzewam, że powyższa odpowiedź Toma też zadziała.

0

Aktualizacja do jQuery 1.7 Rozwiązuje

0

Oto rozwiązanie:

$.post("...", {}, 
     function(data) { 

     // dont forget to add below lines   

     },"json"); 
+0

Powinieneś dodać trochę meta-tekstu – keyser