2011-09-24 12 views
7

He reducido el área de mi problema a la siguiente función. Es parte de un UserScript que estoy escribiendo. Funciona perfectamente en Chrome, pero no funciona en absoluto en Firefox/Greasemonkey. He jugado con eso todo el día y he golpeado una pared de ladrillos. Lo único que tiene sentido es si JSON.parse no funciona correctamente, lo que tendría sentido ya que se sabe que Chrome maneja JSON.parse de forma algo diferente ... ¡pero sé que el JSON está perfectamente formado!XMLHttpRequest para el archivo JSON funciona perfectamente en Chrome, pero no en 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); 
} 

¿Alguna idea?

+0

¿Podría publicar parte del JSON que está tratando de analizar? – Grego

+0

Aquí hay un ejemplo: [{"commenturl": ["/ 107669/Solutionism-is-the-new-Optimism # 3934686"], "metais": ["Metafilter: se tomó el día libre y se sentó en el sótano en la oscuridad y realmente no respondió a nada "]," usuario ": [" hengeman misterioso "]}, {" comentarista ": ["/107126/Lancelot-Link-Secret-Chimp # 3905976 "]," metais " : ["Metafilter: no son monos. Son pedantes."], "Usuario": ["Daddy-O"]}, {"commenturl": ["/ 107129/My-job-is-to -watch-dreams-die # 3906426 "]," metais ": [" MetaFilter: personas casi terribles que se esconden detrás de buenos enlaces "]," usuario ": [" Faint of Butt "]}] – gilrain

+0

Entonces, es una lista de objetos . Debería ser válido, de acuerdo con JSON.org. Creo ...: P – gilrain

Respuesta

1

Después de un poco más de solución de problemas, resultó que se trataba de un problema XHR entre dominios. Funcionó en Chrome porque, de forma predeterminada, Chrome permitía el script en todos los dominios. Ajusté los encabezados para que Chrome supiera solo permitir los dominios adecuados, pero Firefox no permite dominios cruzados en XHR independientemente. Esto se solucionó simplemente cambiando a GM_xmlhttpRequest, lo que permite el dominio cruzado en Firefox y, por suerte, Chrome también es compatible.

¡Gracias por la ayuda, amigos!

1

Me dijeron que JSON no es compatible sin una biblioteca adicional, consulte here la respuesta aceptada. También probé esto

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

Y el mensaje que recibo es "JSON no está definido". Entonces la respuesta parece correcta.

+0

¡Gracias! Lo intentaré mañana. [Este artículo] (https://developer.mozilla.org/En/Using_native_JSON) me hizo pensar que era compatible, sin embargo ... Volveré a comentar después de haberlo probado. – gilrain

+0

Hm, parece que no es eso ... cambió a usar eval para esa línea, para probar. Todavía funciona bien en Chrome, usando eval, pero no va en Firefox. – gilrain

Cuestiones relacionadas