firefox выдает нулевую ошибку XMLHttpRequest при доступе к Vimeo API, но не выдает ошибку от Youtube или других браузеров

Я пытался найти это в Google и другие подобные вопросы здесь, но я все еще не могу понять это. Я отказался от модели прокси-запроса (запрос AJAX к скрипту на моем сервере, который затем делает запрос с внешнего сервера) к полностью основанному на браузере решению для извлечения видеоданных из API Youtube и Vimeo. Это отлично работает с Youtube, но Vimeo, кажется, вызывает исключение в firefox (но отлично работает в konqueror - webkit). Firefox 17.0.1. Вот соответствующий фрагмент кода:

function getAsync(url2)
    {
    console.log('async url: ' + url2);
    if (window.XMLHttpRequest) {
        req = new XMLHttpRequest();
        } else if (window.ActiveXObject) {
        req = new ActiveXObject("Microsoft.XMLHTTP");
        }

    if (req != undefined) {
        req.onreadystatechange = function() {console.log("statechanged ");};            
        console.log('3a');
        try {
           console.log(" try... ");
           req.open("GET", url2, false); // 3rd param is whether "async"
        } catch (err) {
           console.log('err name=['+err.name + ']: err.message=[' + err.message + '] (line ' + err.lineNumber + ')');
        }
        console.log('3b');
        try {
           console.log(' about to send... ');
           req.send("");
        } catch (err) {
           console.log('err name=['+err.name + ']: err.message=[' + err.message + '] (line ' + err.lineNumber + ')');
        }

        console.log('4');
        if (req.readyState == 4) { // only if req is "loaded"
            console.log('5');
            if (req.status == 200) 
                { // only if "OK"
                console.log('6a');
                return req.responseText ;
                }
            else
                {
                console.log('6b');
                return "xml error: " + req.status +" "+req.statusText;
                }
            }
        }
    }  

Это регистрирует следующее для vimeo:

асинхронный URL-адрес: http://vimeo.com/api/v2/video/56945114.json
3a
попробуйте...
http://vimeo.com/api/v2/video/56945114.json
err name=[null]: err.message=[] (строка 204)
3b
собирается отправить...
err name=[NS_ERROR_NOT_INITIALIZED]: err.message=[Компонент не инициализирован] (строка 211)
4

(Строка 204 соответствует req.open("GET", url2, false);, а строка 211 соответствует req.send("");)

И следующее для ютуба:

асинхронный URL: http://gdata.youtube.com/feeds/api/videos/rkbzZakcVrg?v=2&alt=json
3a
попробуйте...
http://gdata.youtube.com/feeds/api/videos/rkbzZakcVrg?v=2&alt=json
statechanged
3b< br> собирается отправить...
statechanged
4
5
6a

Что я делаю неправильно? Или, как мне это исправить?


person insaner    schedule 21.04.2014    source источник


Ответы (1)


Я просто случайно обнаружил проблему, вызывающую это, которую моя отладка, похоже, не выявила. Если кто-то тоже столкнется с этой проблемой, вот что решило ее:

Похоже, мой блокировщик JavaScript (NoScript) блокировал домен vimeo.com, который по какой-то причине был необходим для успешного выполнения XMLHttpRequest. Как только я заметил, что он сказал, что есть заблокированные домены (поскольку мой собственный сервер не заблокирован, и он не использует внешние scripts, было странно, что он так сказал), я включил vimeo.com, попробовал еще раз, и он работал отлично. Итак, я предполагаю, что это связано с тем, как реализован XMLHttpRequest, возможно, с попыткой запустить http-запрос в другом домене как вызов javascript или что-то в этом роде (возможно, кто-то из вас, более знающий, может прояснить это для нас). Но в любом случае мой вопрос решился таким образом. Надеюсь, это поможет любым другим разочарованным пользователям Google.

person insaner    schedule 28.04.2014