2010-04-11 3 views
10

Używam metody ajax jQuery do pozyskania statycznego pliku JSON. Dane są ładowane z lokalnego systemu plików, dlatego nie ma serwera, więc nie mogę zmienić typu MIME.Ostrzeżenie "niezbyt dobrze sformułowane" podczas ładowania strony JSON po stronie klienta w przeglądarce Firefox za pośrednictwem jQuery.ajax

Działa to dobrze w Safari, ale Firefox (3.6.3) zgłasza, że ​​plik nie jest "dobrze sformułowany". Jestem świadomy, a Sprawdziliśmy, podobny post tutaj na przepełnienie stosu:

"not well-formed" error in Firefox when loading JSON file with XMLHttpRequest

wierzę mój JSON jest dobrze wykształcona:

{ 
    "_": ["appl", "goog", "yhoo", "vz", "t"] 
} 

Moje wezwanie ajax jest prosta:

$.ajax({ 
    url: 'data/tickers.json', 
    dataType: 'json', 
    async: true, 
    data: null, 
    success: function(data, textStatus, request) { 
     callback(data); 
    } 
}); 

Gdybym owinąć JSON z tagiem dokumentu:

<document>JSON data</document> 

jak wspomniano w innym pytaniu Stack Overflow wymienionym powyżej, wywołanie ajax kończy się niepowodzeniem z błędem analizy.

A więc: czy istnieje sposób na uniknięcie ostrzeżenia Firefoksa podczas odczytu plików JSON po stronie klienta?

+0

Co się dzieje jeśli nie * używasz dziwnego elementu opakowania? –

+0

Jeśli nie używam tego dziwnego opakowania, to dane JSON są załadowane, ale otrzymuję błędne ostrzeżenie. – Zhami

Odpowiedz

37

Czasami użycie serwera HTTP nie jest opcją, co może oznaczać, że typy MIME nie będą automatycznie dostarczane dla niektórych plików. Zaczerpnięte z odpowiedzią Petera Hoffmana za jQuery .getJSON Firefox 3 Syntax Error Undefined, użyj tego kodu przed dokonaniem jakichkolwiek $ .getJSON() wywołuje:

$.ajaxSetup({beforeSend: function(xhr){ 
    if (xhr.overrideMimeType) 
    { 
    xhr.overrideMimeType("application/json"); 
    } 
} 
}); 

Lub, jeśli używasz $ .ajax():

$.ajax({ 
    url: url, 
    beforeSend: function(xhr){ 
    if (xhr.overrideMimeType) 
    { 
     xhr.overrideMimeType("application/json"); 
    } 
    }, 
    dataType: 'json', 
    data: data, 
    success: callback 
}); 
+5

Co zadziwiające, wydaje się, że jest on nadal potrzebny w 2016 roku za pomocą $ .getJSON(). –

+2

@ A.L.Flanagan Nieustannie zaskakuje mnie, że wciąż otrzymuję awanse. Cieszę się z punktów, które przynosi, ale jestem smutny, że nie został rozwiązany w inny sposób dzięki automatycznemu wykrywaniu lokalnych żądań plików. – Ryan

+1

Dzięki, to zadziałało dla mnie! Korzystam z jQuery lokalnie bez serwera i naprawiłem mój problem. – Salvo

-4

Pliki lokalne i skrypty nie mieszają się. Way zbyt wiele rzeczy związanych z zabezpieczeniami przeglądarki i inne związane z tym dziwactwa. Jeśli chcesz przetestować rzeczy, powinieneś uruchomić swoje rzeczy przez serwer HTTP. Zainstalowanie jednego lokalnie może być dobrym pomysłem.

Powiązane problemy