XMLHttpRequest для файла JSON отлично работает в Chrome, но не в Firefox - PullRequest
7 голосов
/ 25 сентября 2011

Я сузил свою проблемную область до функции ниже.Это часть пользовательского сценария, который я пишу.Он отлично работает в Chrome, но совсем не работает в Firefox / Greasemonkey.Я возился с этим весь день и ударил кирпичную стену.Единственное, что имеет смысл, - это если JSON.parse не работает правильно, что имеет смысл, поскольку известно, что Chrome обрабатывает JSON.parse несколько иначе ... но я знаю, что JSON идеально сформирован!

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);
}

Есть идеи?

Ответы [ 2 ]

1 голос
/ 25 сентября 2011

После еще одного устранения неполадок выясняется, что это была проблема междоменного XHR.Он работал в Chrome, потому что по умолчанию Chrome разрешал сценарий на всех доменах.Я настроил заголовки так, чтобы Chrome знал, что разрешены только надлежащие домены, но Firefox запрещает междоменный домен в XHR независимо от того.Это было исправлено простым переключением на GM_xmlhttpRequest, что позволяет использовать междоменный домен в Firefox и, к счастью, Chrome также поддерживает.

Спасибо за помощь, ребята!

1 голос
/ 25 сентября 2011

Мне сказали, что JSON не поддерживается без дополнительной библиотеки, см. здесь принятый ответ.Я также попробовал это

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

И я получаю сообщение "JSON не определен".Таким образом, ответ кажется правильным.

...