2013-03-15 11 views
16

Sto usando l'oggetto XMLHttpRequest di javascript per inviare una richiesta a un'altra pagina (non sullo stesso server o nome di dominio) Ottengo un errore ns_error_failure in firefox, ma il Javascript funziona in Google Chrome, dopo aver cercato online sembra essere a causa della politica XSS di firefox. Le richieste tra domini non sono consentite.NS_ERROR_FAILURE: Errore in Firefox

Esiste comunque una soluzione per aggirare questo problema e far funzionare il JS sia in Chrome che in Firefox?


Non esitate a chiedere ulteriori dettagli ritenuti necessari!


Ecco il codice che stavo usando.

"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; 
+0

Come è possibile eseguire un cross-dominio XMLHttpRequest? Mai carica per me in Chrome ... –

+0

Beh ... non so perché funzioni, ma lo fa. Sto inviando richieste al bugzilla-api. Puoi dare un'occhiata al codice se vuoi. L'ho provato su Chrome 26, ho lavorato anche su vecchi cromi e cromo. – ffledgling

+0

Sarebbe interessante da vedere, grazie. –

risposta

2

Se siete in grado di utilizzare jQuery, vi suggerisco di avere uno sguardo a JSONP (http://www.jquery4u.com/json/jsonp-examples/) questo permette in modo efficace crossdomain ajax.

+1

Speravo di limitarlo a puro JS, senza usare altre librerie e simili, ma darò una possibilità. – ffledgling

+2

@ffledgling E 'già abbastanza brutto questo tizio ha risposto a una domanda JavaScript con jQuery, è peggio che tu abbia rinunciato a cercare il percorso più semplice invece di prendersi il tempo per capire la risposta giusta senza forzare altri 70KB di larghezza di banda da sprecare. – John

+8

@John Non ho mollato la ricerca della risposta, ho provato tutti gli altri metodi JS prima di fare questa domanda su SO, ma ancora non so quale sia il modo "giusto" per farlo usando puro JS. Invece di criticare qualcuno che in realtà ha provato a rispondere alla domanda, se * * conosci * di un modo per farlo, dovresti andare avanti e aggiungere la tua risposta. – ffledgling