2013-03-15 52 views
16

javascriptのXMLHttpRequestオブジェクトを使用して別のページ(同じサーバーまたはドメイン名ではない)にリクエストを送信しています。Firefoxでns_error_failureエラーが発生しましたが、Javascriptはオンラインで検索した後、それはFirefoxのXSSポリシーのためにあるようです。ドメイン間のリクエストは許可されません。NS_ERROR_FAILURE:Firefoxでエラーが発生しました

これを回避して、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; 
+0

XMLHttpRequestクロスドメインをどのように実行できますか?クロムの中で私のためにロードされません... –

+0

まあ...私はそれが動作するか分からないが、それはありません。私はbugzilla-apiにリクエストを送ります。あなたが望むなら、コードを見ることができます。私はChrome 26でそれをテストし、古いクロムとクロムでも動作しました。 – ffledgling

+0

これは面白いですね、ありがとう。 –

答えて

2

あなたはjQueryのを使用することができますならば、私はJSONPを見て(http://www.jquery4u.com/json/jsonp-examples/)を有することをお勧めこれは効果的にクロスドメインAJAXを可能にします。

+1

私はそれを純粋にJS、他のlibsなどを使用せずに、私はこれを撃つだろう。 – ffledgling

+2

@ffledglingこの男はJavaScriptの質問にjQueryで答えたが、悪い点は、別の70KBの帯域を無駄にせずに正しい答えを見つけ出すのではなく、最も簡単なルートを探していることだった。 – John

+8

@ジョン私は答えのための検索をあきらめていませんでしたので、私はまだ、これを行うための "正しい"方法は純粋なJSを使用しているか分からないfwiwこの質問をする前に、他の適切なJSメソッドを試してみました。実際に質問に答えようとした人を批判するのではなく、これを行う方法を知っていれば、答えを加えてください。 – ffledgling

関連する問題