Javascript NS\u错误\u失败:Firefox中的失败

Javascript NS\u错误\u失败:Firefox中的失败,javascript,ajax,firefox,xmlhttprequest,xss,Javascript,Ajax,Firefox,Xmlhttprequest,Xss,我正在使用javascript的XMLHttpRequest对象向另一个页面发送请求(不在同一服务器或域名上)。我在firefox中收到一个ns_error_failure错误,但javascript在Google Chrome中工作,在线搜索后,似乎是因为firefox的XSS策略。不允许跨域请求 有没有办法解决这个问题,让JS同时在chrome和Firefox中运行 请随时询问您认为需要的其他详细信息 这是我使用的代码 "use strict"; function showFixed(

我正在使用javascript的XMLHttpRequest对象向另一个页面发送请求(不在同一服务器或域名上)。我在firefox中收到一个ns_error_failure错误,但javascript在Google Chrome中工作,在线搜索后,似乎是因为firefox的XSS策略。不允许跨域请求

有没有办法解决这个问题,让JS同时在chrome和Firefox中运行


请随时询问您认为需要的其他详细信息


这是我使用的代码

"use strict";

function showFixed(username)
{
    console.log("Entered script");

    var url = 'https://api-dev.bugzilla.mozilla.org/latest/bug'
        + '?quicksearch='
        + encodeURIComponent('FIXED @'+username);
    displayBug(url);
}

function showPending(username)
{
    console.log("Entered script");

    var url = 'https://api-dev.bugzilla.mozilla.org/latest/bug'
        + '?quicksearch='
        + encodeURIComponent('@'+username);
    displayBug(url);
}

function showCC(username)
{
    console.log("Entered script");

    var url = 'https://api-dev.bugzilla.mozilla.org/latest/bug'
        + '?quicksearch='
        + encodeURIComponent('cc:'+username);
    displayBug(url);
}

function displayBug(url)
{
    var xmlhttp = new XMLHttpRequest();
    xmlhttp.open("GET",url,false);
    xmlhttp.send();
    var text = xmlhttp.responseText;

    var json = JSON.parse(text);

    for(var i=0;i<json.bugs.length;i++)
    {
        var tempRow = document.createElement('tr');

        var tempId = document.createElement('td');
        tempId.innerHTML = '<a href=\'https://bugzilla.mozilla.org/show_bug.cgi?id=' + json.bugs[i].id + '\'>'+ json.bugs[i].id + '</a>';
        var tempCreator = document.createElement('td');
        tempCreator.innerHTML = json.bugs[i].creator.real_name;
        var tempShortDesc = document.createElement('td');
        tempShortDesc.innerHTML = json.bugs[i].summary;
        var tempComponent = document.createElement('td');
        tempComponent.innerHTML = json.bugs[i].component;
        var tempAssignee = document.createElement('td');
        tempAssignee.innerHTML = json.bugs[i].assigned_to.real_name;
        var tempWhiteBoard = document.createElement('td');
        tempWhiteBoard.innerHTML = json.bugs[i].whiteboard;
        var tempBugStatus = document.createElement('td');
        tempBugStatus.innerHTML = json.bugs[i].status;
        var tempResolution = document.createElement('td');
        tempResolution.innerHTML = json.bugs[i].resolution;
        var tempLastChange = document.createElement('td');
        tempLastChange.innerHTML = json.bugs[i].last_change_time;

        tempRow.appendChild(tempId);
        tempRow.appendChild(tempAssignee);
        tempRow.appendChild(tempCreator);
        tempRow.appendChild(tempBugStatus);
        tempRow.appendChild(tempShortDesc);
        tempRow.appendChild(tempLastChange);
        document.getElementById('bugs-table-tbody').appendChild(tempRow);
    }

    document.getElementById('main').innerHTML = '';
}

function wrapper()
{
    var waitString = "Please wait while bug list is loaded..."
    document.getElementById('main').innerHTML = waitString;
“严格使用”;
函数showFixed(用户名)
{
console.log(“输入脚本”);
var url='1〕https://api-dev.bugzilla.mozilla.org/latest/bug'
+“快速搜索”
+encodeURIComponent('FIXED@'+用户名);
显示错误(url);
}
函数showPending(用户名)
{
console.log(“输入脚本”);
var url='1〕https://api-dev.bugzilla.mozilla.org/latest/bug'
+“快速搜索”
+encodeURIComponent('@'+用户名);
显示错误(url);
}
函数showCC(用户名)
{
console.log(“输入脚本”);
var url='1〕https://api-dev.bugzilla.mozilla.org/latest/bug'
+“快速搜索”
+encodeURIComponent('cc:'+用户名);
显示错误(url);
}
函数displayBug(url)
{
var xmlhttp=new XMLHttpRequest();
open(“GET”,url,false);
xmlhttp.send();
var text=xmlhttp.responseText;
var json=json.parse(文本);

对于(var i=0;i如果您能够使用jQuery,我建议您看看JSONP()这有效地允许跨域ajax。

您如何能够跨域运行XMLHttpRequest?从未在Chrome中为我加载过…好吧…我不知道为什么它可以工作,但它确实可以。我正在向bugzilla api发送请求。如果您愿意,您可以查看代码。我在Chrome 26上测试过它,也在较旧的Chrome和Chromium上工作过。这就是我很高兴看到,谢谢。@Qantas949请参见编辑。您可能只想查看其中一个show*函数和displaybug函数的初始位您是否尝试了
xmlhttprequest.send(null)
而不是
xmlhttprequest.send()
?我记得我曾经因为这个原因收到过一条错误消息。@fflegging对不起,我不想插嘴这个老问题,但我真的无法置身事外。70KB的内存肯定会缓存在浏览器中。即使没有缓存,也可能会由CDN提供。既然如此,为什么还要费心在您有时间的时候尝试用vainilla JS编写代码呢这么好的工具(请看这里的生产力与成本)在眨眼之间就能实现?我们现在还不必过度优化这些东西。此外,一旦包含了JQuery,还不如将其用于大量其他任务。(是的,这是一个离题的评论,请随意讨厌:)@当然,这个问题以及关于StackOverflow上XHR的其他类似问题的问题似乎是,每个人都建议使用JQuery,这在很多情况下都是有意义的,特别是当项目中已经包含了JQuery时,但是如果我没有使用JQuery并且它没有实际需要,那么它真的不应该是这样用vanilla JS编写一个简单的XHR并不难。在我看来,很少有人知道如何编写跨浏览器(如果只针对最新版本的Gecko和Webkit浏览器)XHR了,像使用JQuery这样的建议也帮不上忙。