2011-09-24 47 views
7

我已將問題範圍縮小到下面的功能範圍。這是我寫的一個用戶腳本的一部分。它在Chrome中完美運行,但在Firefox/Greasemonkey中完全不起作用。我一整天都在修整它,並且撞到了一堵磚牆。唯一有意義的是,如果JSON.parse工作不正確,這是有道理的,因爲Chrome已知可以處理JSON.parse,但是我知道JSON是完美組合的!XMLHttpRequest for JSON文件在Chrome中完美工作,但在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); 
} 

任何想法?

+0

你可以發佈你試圖解析的部分JSON嗎? – Grego

+0

下面是一個例子:[{「commenturl」:[「/ 107669/Solutionism-is-new-Optimism#3934686」],「metais」:[「Metafilter:在白天坐在地下室休息一天並沒有真正迴應任何事情「],」user「:[」uncanny hengeman「]},{」commenturl「:[」/ 107126/Lancelot-Link-Secret-Chimp#3905976「],」metais「 :[「Metafilter:他們不是猴子,他們是學生。」],「user」:[「Daddy-O」]}, {「commenturl」:[「/ 107129/My-job-is-to -watch - 夢想 - 死#3906426「],‘metais’:」濾機:多可怕的人躲在良好的關係「],‘用戶’:」對接的微弱「]}] – gilrain

+0

因此,它是對象的列表。根據JSON.org的說法,它應該是有效的。我認爲...:P – gilrain

回答

1

一些故障排除後,原來的是一個跨域XHR問題。它在Chrome中工作,因爲默認情況下,Chrome允許在所有域上使用該腳本。我調整了標題,Chrome就知道只允許正確的域名,但Firefox無論如何都不允許XHR上的跨域。這通過簡單地切換到GM_xmlhttpRequest來解決,它允許在Firefox中跨域,並且幸運的是,哪些Chrome瀏覽器也支持。

感謝您的幫助,夥計們!

1

有人告訴我,如果沒有額外的庫不支持JSON,看到here接受的答案。我也試過這個

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

而我得到的消息是「JSON未定義」。所以答案似乎是正確的。

+0

謝謝!明天我會試一試。 [本文](https://developer.mozilla.org/En/Using_native_JSON)讓我覺得它得到了支持,但是......我在嘗試過之後再次發表評論。 – gilrain

+0

嗯,看起來像不是這樣......切換到使用eval的那條線來測試。它仍然可以在Chrome中正常運行,使用eval,但在Firefox中無法使用。 – gilrain

相關問題