2017-03-09 7 views
0
にクロスオリジンXmlHttpRequestのは、XMLファイルを返すように

行き方:常にエラーについて、[ネットワーク]タブを確認することを忘れないでください、MY投稿さANSWERこれは私PART ON愚かな質問されたことを詳しく説明、おかげで私ははEDITはHTML5

をepascarello HTML5ウェブサイトのバックエンドコードを書くと、この非常に重要な機能を動作させることができません。このサイトでは、PHPで生成されたXMLファイルを別のサーバーから動的に取得する必要があることがよくあります。私はかなりサーバーがこのサーバーからの要求を許可するようにAccess-Control-Allow-Originを設定していることを確信しています。私は私の上司と確認するが、彼は二日間外出していると正直言って、それは私が間違っている可能性が高いです。誰かがこのコードで何か間違っているのを見ますか?

通知request.send(null)の前に一番下にアラートがあります。 .send()はうまく動作し、同じサーバーからXMLファイルを要求すると関数が完了しますが、他のサーバーからリクエストすると、 "before"アラートが表示されますが、 "after"は表示されません。私にはエラーや他のアラートが表示されていません。

注:

いくつかのグローバル変数への参照や、他の.jsファイルではあり

。私はそれらを含むことは無意味であり、疑問を混乱させると判断しました。

'cross'は、要求が別のサーバーにクロスオリジンであるかどうかを示すブール値です。何のアクセス制御 - 許可 - 起源フラグは、私がアクセスしようとしているサーバ上で実際には存在しないことをネットワーク]タブ確認書に記載されてい

function createXmlHttpRequestObject(cross) { 
 
    if(cross === undefined) { 
 
    cross = false; 
 
    } 
 
    
 
    var xmlHttp; 
 

 
    if(cross) { 
 
    if(window.XDomainRequest) { 
 
     try { 
 
     xmlHttp = new window.XDomainRequest(); 
 
     } catch(e) { 
 
     xmlHttp = false; 
 
     } 
 
    } else { 
 
     xmlHttp = new XMLHttpRequest(); 
 
    } 
 
    } else { 
 
    if(window.ActiveXObject) { 
 
     try { 
 
     xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); 
 
     } catch(e) { 
 
     xmlHttp = false; 
 
     } 
 
    } else { 
 
     try { 
 
     xmlHttp = new XMLHttpRequest(); 
 
     } catch(e) { 
 
     xmlHttp = false; 
 
     } 
 
    } 
 
    } 
 

 
    if(!xmlHttp) { 
 
    \t alert ("Error: CREATING XMLHTTP REQUEST OBJECT FAILED"); 
 
    } else { 
 
    \t return xmlHttp; 
 
    } 
 
} 
 

 
//receives xml object from file 
 
function getXmlObject(URL) { 
 
    //if url contains any of site root, then it is not cross domain 
 
    var cross = false; 
 
    if(!URL.includes(url_home)) { 
 
    cross = true; 
 
    } 
 
    
 
    var request = createXmlHttpRequestObject(cross); 
 
    var response; 
 
    
 
    if(window.ActiveXObject || window.XDomainRequest) { 
 
    request.onload = function(){ 
 
     response = request.responseXML; 
 
    }; 
 
    request.open('GET',URL,false); 
 
    request.send(null); 
 
    } else { 
 
    request.open('GET',URL,false); 
 
    request.onreadystatechange = function(){ 
 
     if(request.readyState == 4) { 
 
     if(request.status == 200) { 
 
      response = request.responseXML; 
 
     } else { 
 
      var warn = 'NOT FOUND\n' + URL; 
 
      response = warn; 
 
      alert(warn); 
 
     } 
 
     } 
 
    }; 
 
    alert("before"); 
 
    request.send(null); 
 
    alert("after"); 
 
    } 
 
    
 
    return response; 
 
}

+0

[ネットワーク]タブには何が表示されますか?呼び出しにエラーハンドラがないのはなぜですか?問題のあるブラウザですか? – epascarello

+0

一口、これは恥ずかしいです。私はそれを確認することは考えていませんでした。私は比較的Webコーディングに新しいですし、エラーを探すためにWebタブがあることを忘れてしまいます。私の疑惑は正しい。私が取得しようとしているサーバーには、Access-Control-Allow-Originフラグはありません。 Welp、それが変わることができるかどうか、適切な人に尋ねる時間。ありがとう、epascarello。 –

答えて

0

。私は正しい人と話をして、それが変わるかどうかを見なければならないでしょう。それでも、このコードを改善したり、ここに問題が残っていれば、私はそれを指摘してはいけません。