NS_ERROR_FAILURE:Firefox失败

ffl*_*ing 18 javascript xss ajax firefox xmlhttprequest

我正在使用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;
Run Code Online (Sandbox Code Playgroud)

小智 1

如果您能够使用 jQuery,我建议您查看 JSONP ( http://www.jquery4u.com/json/jsonp-examples/ ),这有效地允许跨域 ajax。

  • @TIMINeutron,这个问题和 StackOverflow 上关于 XHR 的其他类似问题的问题似乎是每个人都建议使用 JQuery,这在很多情况下都是有意义的,特别是当项目中已经包含 JQuery 时,但实际上,如果我不使用 JQuery 并且它没有真正的需要,那么对于某人来说,用 vanilla JS 编写一个简单的 XHR 确实不应该那么困难。在我看来,很少有人知道如何编写跨浏览器(如果只是针对最新版本的 Gecko 和 Webkit 浏览器)XHR,并且像使用 JQuery 这样的建议没有帮助。 (5认同)