【问题标题】:firefox gives XMLHttpRequest "null" error accessing Vimeo API but no error from Youtube or other browsersfirefox 在访问 Vimeo API 时给出 XMLHttpRequest “null”错误,但在 Youtube 或其他浏览器中没有错误
【发布时间】:2014-06-05 22:37:27
【问题描述】:

我尝试在 google 上查找此内容,以及此处的其他类似问题,但我仍然无法弄清楚。我从代理请求模型(AJAX 请求到我服务器上的脚本,然后从外部服务器发出请求)转移到完全基于浏览器的解决方案,以从 Youtube 和 Vimeo API 中提取视频数据。这与 Youtube 完美配合,但 Vimeo 似乎在 firefox 中触发了异常(但在 konqueror - webkit 中工作正常)。火狐是 17.0.1。下面是相关代码sn-p:

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 记录以下内容:

异步网址:http://vimeo.com/api/v2/video/56945114.json
3a
试试...
http://vimeo.com/api/v2/video/56945114.json
错误名称=[null]:err.message=[](第 204 行)
3b
即将发送...
错误名称=[NS_ERROR_NOT_INITIALIZED]:err.message=[组件未初始化](第 211 行)
4

(第204行对应req.open("GET", url2, false);,第211行对应req.send("");

YouTube 的以下内容:

异步网址: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
状态改变
3b
即将发送...
状态改变
4
5
6a

我做错了什么?或者,我该如何解决这个问题?

【问题讨论】:

    标签: javascript ajax firefox youtube


    【解决方案1】:

    我只是偶然发现了导致此问题的问题,而我的调试似乎没有发现。万一有人也遇到这个问题,下面是解决它的方法:

    似乎我的 JavaScript 阻止程序 (NoScript) 阻止了 vimeo.com 域,出于某种原因,这是成功执行 XMLHttpRequest 所必需的。一旦我注意到它说有被阻止的域(因为我自己的服务器没有被阻止,并且它没有使用外部scripts,它会这么说很奇怪)我启用了 vimeo.com,再次尝试,它完美地工作。所以我猜这源于 XMLHttpRequest 的实现方式,可能试图在另一个域上运行 http 请求作为 javascript 调用或类似的东西(也许你们中的一个更有知识的人可以为我们澄清这一点)。但无论如何,我的问题就这样解决了。希望对其他沮丧的谷歌用户有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-18
      • 1970-01-01
      • 1970-01-01
      • 2016-06-05
      • 2013-08-30
      • 1970-01-01
      • 2017-05-24
      • 1970-01-01
      相关资源
      最近更新 更多