2011-09-24 21 views
7

Zawęziłem mój obszar problemowy do poniższej funkcji. Jest to część napisanego przeze mnie usercriptu. Działa doskonale w Chrome, ale nie działa w ogóle w Firefox/Greasemonkey. Całowałem przez cały dzień i uderzyłem w mur. Jedyną rzeczą, która ma sens, jest to, że JSON.parse nie działa poprawnie, co miałoby sens, ponieważ Chrome radzi sobie z JSON.parse nieco inaczej ... ale wiem, że JSON jest doskonale ukształtowany!XMLHttpRequest dla pliku JSON działa idealnie w Chrome, ale nie w przeglądarce Firefox

function getTagline() { 
    var jsonfile = new XMLHttpRequest(); 
    jsonfile.open("GET", "http://example.com/somegood.json", true); 
    jsonfile.onreadystatechange = function() { 
     if (jsonfile.readyState == 4) { 
      if (jsonfile.status == 200) { 
       var taglines = JSON.parse(jsonfile.responseText); 
       var choose = Math.floor(Math.random() * taglines.length); 
       var tagline = document.createTextNode(taglines[choose].metais); 
       insertTagline(tagline); 
      } 
     } 
    }; 
    jsonfile.send(null); 
} 

Wszelkie pomysły?

+0

Czy możesz wysłać część JSON, który próbujesz analizować? – Grego

+0

Oto przykład: [{"commenturl": ["/ 107669/Solutionism-is-the-new-Optimism # 3934686"], "metais": ["Metafilter: wziął dzień wolny i siedział w piwnicy w ciemności i tak naprawdę nie reaguje na nic "]," user ": [" uncanny hengeman "]}, {" commenturl ": ["/107126/Lancelot-Link-Secret-Chimp # 3905976 "]," metais " : ["Metafilter: Oni nie są małpami, są pedantami."], "User": ["Daddy-O"]}, {"komentarz": ["/ 107129/Moje-zadanie-jest-do -watch-dreams-die # 3906426 "]," metais ": [" MetaFilter: przeważnie straszni ludzie chowają się za dobrymi linkami "]," user ": [" Faint of Butt "]}] – gilrain

+0

To jest lista obiektów . Powinno być ważne, zgodnie z JSON.org. Myślę, że ...: P – gilrain

Odpowiedz

1

Po wykonaniu kilku czynności związanych z rozwiązywaniem problemów okazało się, że był to problem XHR w wielu domenach. Działa w Chrome, ponieważ domyślnie Chrome zezwalał na skrypt we wszystkich domenach. Udoskonaliłem nagłówki, więc Chrome wiedział, że dozwolone są tylko właściwe domeny, ale Firefox blokuje domeny XHR niezależnie. Zostało to naprawione poprzez zwykłe przejście na GM_xmlhttpRequest, co pozwala na używanie wielu domen w Firefoksie i, na szczęście, który Chrome również obsługuje.

Dzięki za pomoc, ludzie!

1

Powiedziano mi, że JSON nie jest obsługiwany bez dodatkowej biblioteki, zobacz here z zaakceptowaną odpowiedzią. Też próbowałem ten

try { 
    clientList = JSON.parse(responseText); 
} catch (e) { 
    alert(e.message); 
} 

I otrzymuję komunikat jest "JSON jest niezdefiniowany". Odpowiedź wydaje się być poprawna.

+0

Dziękujemy! Spróbuję jutro. [Ten artykuł] (https://developer.mozilla.org/En/Using_native_JSON) sprawił, że myślałem, że jest on obsługiwany, chociaż ... Będę komentował ponownie po wypróbowaniu go. – gilrain

+0

Hm, wygląda na to, że to nie jest ... przełączone na używanie eval dla tej linii, aby przetestować. Nadal działa dobrze w Chrome, używając eval, ale nie ma go w Firefoksie. – gilrain

Powiązane problemy