2013-03-15 10 views
16

Ich benutze Javascript XMLHttpRequest Objekt, um eine Anfrage an eine andere Seite (nicht auf dem gleichen Server oder Domainname) Ich bekomme einen Fehler ns_error_failure in Firefox, aber das Javascript funktioniert in Google Chrome, nach der Online-Suche Es scheint wegen der XSS-Richtlinie firefox zu sein. Domainübergreifende Anfragen sind nicht erlaubt.NS_ERROR_FAILURE: Fehler in Firefox

Gibt es sowieso um dies zu umgehen und die JS in Chrome und Firefox laufen zu lassen?


Bitte zögern Sie nicht nach zusätzlichen Details zu fragen, die Sie für notwendig erachten!


Hier ist der Code, den ich verwendet habe.

"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

Wie können Sie eine XMLHttpRequest Cross-Domain ausführen? Niemals lädt für mich in Chrome ... –

+0

Nun ... Ich weiß nicht, warum es funktioniert, aber es tut. Ich sende Anfragen an die Bugzilla-API. Sie können sich den Code ansehen, wenn Sie möchten. Ich habe es auf Chrome 26 getestet, habe auch an älteren Chromes und Chroms gearbeitet. – ffledgling

+0

Das wäre interessant zu sehen, danke. –

Antwort

2

Wenn Sie in der Lage sind jQuery zu verwenden, würde ich vorschlagen, einen Blick auf JSONP (http://www.jquery4u.com/json/jsonp-examples/) mit dieser domänenübergreif Ajax effektiv ermöglicht.

+1

Ich hatte gehofft, es auf rein zu begrenzen JS, ohne irgendwelche anderen libs und ähnliches zu benutzen, aber ich gebe das eine Chance. – ffledgling

+2

@ffledgling Es ist schlimm genug, dass dieser Typ eine JavaScript-Frage mit jQuery beantwortet hat. Es ist schlimmer, dass Sie die einfachste Route aufgegeben haben, anstatt sich die richtige Antwort zu überlegen, ohne weitere 70KB Bandbreite zu verschwenden. – John

+8

@John Ich gab die Suche nach der Antwort nicht auf, ich probierte alle anderen richtigen JS Methoden aus, bevor ich diese Frage zu SO stellte, fwiw Ich weiß immer noch nicht, was der "richtige" Weg ist, reines JS zu benutzen. Anstatt jemanden zu kritisieren, der tatsächlich versucht hat, die Frage zu beantworten, sollten Sie, wenn Sie * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * einen Weg wissen, dies tun. – ffledgling

Verwandte Themen