0

何らかの理由で、次のコードはInternet Explorerでは機能しますが、ChromeまたはFirefoxでは機能しません。このブラウザでは、次のものを受け取ります。

スライダーデータを取得できません。」

アラート。

私はこれでいくつかの助けが欲しいです。

ありがとう。

これが私のJavaScriptコードです:

<script>

if (navigator.appName == "Microsoft Internet Explorer") 
{ 
    request = new ActiveXObject("Microsoft.XMLHTTP"); 
} 
else 
{ 
    request = new XMLHttpRequest(); 
}
if (request == null)
    alert ("Your browser doesn't support XMLHttpRequest");

function getSelectedText(elementId) 
{
var elt = document.getElementById(elementId);

if (elt.selectedIndex == -1)
    return null;

return elt.options[elt.selectedIndex].value;
}

function sendRequest()
{
    debugger;
    var type = getSelectedText('dropdown');
    //alert("The chosen type: "+type);
    var url = 'https://tomcat-emildesign.rhcloud.com/coupons/Client/serveranswer.jsp?type=' + type;
    request.open("GET", url, true); 
    request.onreadystatechange= processRequest; 
    request.send(null);
}

function processRequest() 
{
    if (request.readyState == 4) 
    {
        if (request.status == 200) 
        {
            parseMessage();
        } 
        else 
        {
            alert ( "Not able to retrieve sliders data." );
        }
    }
}

function parseMessage()
{
    // Assign the XML file to a var variable.
    var doc = request.responseXML; 
    var pending, hires, rejected;
    if(navigator.appName == "Microsoft Internet Explorer")
    {
        pending = doc.documentElement.getElementsByTagName('pending').item(0).text;
        hires = doc.documentElement.getElementsByTagName('hires').item(0).text;
        rejected =  doc.documentElement.getElementsByTagName('rejected').item(0).text;      
    }
    else
    {   
        pending = doc.documentElement.getElementsByTagName('pending')[0].textContent;   
        hires = doc.documentElement.getElementsByTagName('hires')[0].textContent;
        rejected = doc.documentElement.getElementsByTagName('rejected')[0].textContent;
    }
    alert("values:" + pending + "," + hires + "," + rejected);
}

4

2 に答える 2

1

最初のif-elseブロックを次のように置き換えます。

// Mozilla/Safari/Non-IE
if (window.XMLHttpRequest) {
    request = new XMLHttpRequest();
}
// IE
else if (window.ActiveXObject) {
    request = new ActiveXObject("Microsoft.XMLHTTP");
}

ブラウザのテストよりも、関数のサポートのテストの方が良いでしょう。

于 2013-02-12T18:52:10.913 に答える
0

コードに問題はありません。問題は、Internet Explorerでは信頼されているが、他のブラウザでは失敗するクロスドメインリクエストを実行している可能性があります。

これを確認するために、返されたrequest.statusが0に等しいかどうかを確認できます。

ウィキペディアの同一生成元ポリシーに関する詳細情報。

于 2013-02-12T19:06:21.623 に答える