2011-02-10 6 views
15

Właśnie zaktualizowałem do JQuery 1.5 i wszystkie moje wywołania ajaxowe, które zwracają JSON i wiele wtyczek natychmiast się zepsuło.JQuery 1.5 i nowy typ danych "Text JSON"

W moim pre-1.5 kodu, ja określony typ danych jak:

dataType: "json" 

Zmiana typu danych do:

dataType: "text json" 

rozwiązuje problem, ale nie chcę, aby ręcznie zmienić wtyczek jak wpłynie to na uaktualnienia.

Czy istnieje sposób na lepszą obsługę przy mniejszych zakłóceniach?

+2

Jeśli zwrócą JSON, będą to połączenia AJAJ, prawda? ;) – Guffa

+0

Jeśli nie określisz właściwości dataType w pluginach, zamiast tego użyjesz globalnego obiektu ustawień AJax, czy nie rozwiąże to problemu. –

+0

Jeśli jesteś właścicielem plików źródłowych, które generują dane dla wywołań AJAX, dodaj nagłówek 'Content-Type: application/json' i napraw wszystkie skrypty (powinno to być zrobione za każdym razem, gdy JSON będzie wysyłany). –

Odpowiedz

7

Ten problem jest spowodowany przez wtyczkę sprawdzania poprawności jQuery oraz sposób rozszerzenia obiektu ajaxSettings na własny użytek (zmienia wywołania json na wywołania jsonp). Nie mam nadzieję być oficjalnym aktualizacja walidacja plugin szybko, ale w międzyczasie, nie umywa się tutaj, że rozwiązuje problem:

https://github.com/bigfix/jquery-validation/commit/9aa53f9241224ba349f9fe1b2c801be0f431b63b

Edycja:

jQuery Validation Plugin kompatybilny z jQuery 1.5.1, dostępnego na piaście git: https://github.com/jzaefferer/jquery-validation

Edit # 2: jQuery Validation Plugin 1.8, zgodny z jQuery 1.5.1 (i wcześniej) jest udostępniana:

przeczytać o nim: http://bassistance.de/2011/03/25/release-validation-plugin-1-8/

Pobierz go: http://bassistance.de/jquery-plugins/jquery-plugin-validation/

+0

Dziękuję za tę odpowiedź! Yep - nawet po zwróceniu prawidłowego Content-Type (application/json) z serwera aktualna wtyczka do sprawdzania poprawności jQuery (1.7) powoduje jej uszkodzenie. –

+0

dobra odpowiedź, proszę pana – dagda1

3

Kod niepotwierdzony, dodaj to po dołączeniu jQuery i przed uruchomieniem niestandardowego kodu.

jQuery.ajaxSetup({ 
    converters: { 
    "json": jQuery.parseJSON, 
    "* json": jQuery.parseJSON 
    } 
}); 
+0

Jest to ta sama linia, co coś, co miałem zasugerować ... Nowa wersja jQuery może zachowywać się inaczej, jeśli typ danych różni się od typu danych, które dociera, tj. spróbuj wykonać konwersję przed analizą jako określony typ. – Guffa

+0

To też nie działa niestety. Sprawdziłem typ zawartości w skrzypku i rzeczywiście jest to aplikacja/json; charset = utf-8. – dagda1

4

Natknąłem się na ten błąd JQuery, który rozwiązuje problem http://bugs.jquery.com/ticket/8084.

Dodanie następującego kodu po deklaracji skryptu JQuery rozwiązuje problemu:

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