2011-09-24 12 views
7

Ho ristretto la mia area problematica alla funzione sottostante. Fa parte di un userscript che sto scrivendo. Funziona perfettamente in Chrome, ma non funziona affatto in Firefox/Greasemonkey. Ci ho lavorato tutto il giorno e ho colpito un muro di mattoni. L'unica cosa che ha senso è se JSON.parse non funziona correttamente, il che avrebbe senso dal momento che Chrome è noto per gestire JSON.parse in qualche modo in modo diverso ... ma so che il JSON è perfettamente formato!XMLHttpRequest per file JSON funziona perfettamente in Chrome, ma non in 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); 
} 

Qualche idea?

+0

Potrebbe pubblicare parte del JSON che si sta tentando di analizzare? – Grego

+0

Ecco un esempio: [{"commenturl": ["/ 107669/Solutionism-is-the-new-Optimism # 3934686"], "metais": ["Metafiltro: ha preso il giorno libero e si è seduto nel seminterrato nel buio e in realtà non ha risposto a nulla "]," utente ": [" uncanny hengeman "]}, {" commenturl ": ["/107126/Lancelot-Link-Secret-Chimp # 3905976 "]," metais " : ["Metafilter: non sono scimmie. Sono pedanti."], "Utente": ["Daddy-O"]}, {"commenturl": ["/ 107129/My-job-is-to -watch-dreams-die # 3906426 "]," metais ": [" MetaFilter: per lo più persone terribili che si nascondono dietro buoni link "]," utente ": [" Faint of Butt "]}] – gilrain

+0

Quindi, è un elenco di oggetti . Dovrebbe essere valido, secondo JSON.org. Penso ...: P – gilrain

risposta

1

Dopo un po 'di ulteriore risoluzione dei problemi, risulta che si trattava di un problema XHR interdominio. Funzionava in Chrome perché, per impostazione predefinita, Chrome consentiva lo script su tutti i domini. Ho ottimizzato le intestazioni in modo che Chrome sapesse di consentire solo i domini appropriati, ma Firefox non consente il cross-domain su XHR a prescindere. Questo problema è stato risolto semplicemente passando a GM_xmlhttpRequest, che consente il cross-domain in Firefox e, fortunatamente, anche Chrome.

Grazie per l'aiuto, gente!

1

Mi è stato detto che JSON non è supportato senza una libreria aggiuntiva, vedere here la risposta accettata. Ho anche provato questo

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

E il messaggio che ottengo è "JSON non è definito". Quindi la risposta sembra corretta.

+0

Grazie! Domani proveremo. [Questo articolo] (https://developer.mozilla.org/En/Using_native_JSON) mi ha fatto pensare che fosse supportato, anche se ... Commenterò di nuovo dopo averlo provato. – gilrain

+0

Hm, sembra che non sia così ... passato a usare eval per quella linea, a testare. Funziona ancora bene in Chrome, utilizzando eval, ma non andare in Firefox. – gilrain

Problemi correlati