2013-03-15 6 views
16

Başka bir sayfaya (aynı sunucuda veya etki alanında değil) bir istek göndermek için javascript'in XMLHttpRequest nesnesini kullanıyorum Firefox'ta bir ns_error_failure hatası alıyorum, ancak Javascript çevrimiçi arama yaptıktan sonra Google Chrome'da çalışıyor Firefox'un XSS politikası yüzünden görünüyor. Alanlar arası isteklere izin verilmez.NS_ERROR_FAILURE: Firefox'taki hata

Bunun için çalışmak ve JS'yi hem krom hem de Firefox'ta çalıştırmak için herhangi bir yer var mı?


Lütfen ihtiyaç duyduğunuz ek ayrıntıları sormaya çekinmeyin!


Kullandığım kod şu şekildedir. jQuery kullanmak mümkün değilse

"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

XMLHttpRequest etki alanları arası bir alanı nasıl çalıştırabilirsiniz? Chrome'da asla yükleyemiyorum ... –

+0

Şey ... Neden işe yaradığını bilmiyorum, ama öyle. Bugzilla-api'ye istek gönderiyorum. İsterseniz kodlara bir göz atabilirsiniz. Krom 26'da test ettim, ayrıca eski kromlar ve kromlar üzerinde çalıştım. – ffledgling

+0

Görmek ilginç olurdu, teşekkürler. –

cevap

2

, bu etkili bir crossdomain ajax verir JSONP (http://www.jquery4u.com/json/jsonp-examples/) bakmak zorunda öneririz.

+1

Onu saflaştırmayı umuyordum. JS, başka bir lib ve benzeri kullanmadan, ama bu bir atış vereceğim. – ffledgling

+2

@ffledgling Bu kullanıcı yeterince jQuery ile bir JavaScript sorusu cevaplandı, daha da kötüsü, 70 kilo bant genişliği boşa harcanmadan doğru cevabı bulmak için zaman ayırmak yerine en kolay yolu aramaktan vazgeçti. – John

+8

@John Cevabı araştırmaktan vazgeçmedim, diğer tüm uygun JS yöntemlerini denedim, bu soruyu SO'ya sormadan önce, fwiw hala "doğru" yolun ne olduğunu bilmiyorum saf JS kullanıyor. Soruyu cevaplamaya çalışan birini eleştirmek yerine, bunu yapmak için bir yol biliyorsanız, devam etmeli ve cevabınızı eklemelisiniz. – ffledgling