在Internet Explorer中收到但未在Chrome中收到的Ajax响应:

时间:2013-02-12 18:49:32

标签: javascript xml-parsing xmlhttprequest

出于某种原因,以下代码适用于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);
}

2 个答案:

答案 0 :(得分:1)

我会用这个替换你的第一个if-else块:

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

您最好测试功能支持与测试浏览器。

答案 1 :(得分:0)

我认为您的代码没有任何问题。问题可能是您正在执行Internet Explorer中受信任的跨域请求,但在其他浏览器中失败。

要确认这一点,您可以检查返回的request.status是否等于0.

有关Wikipedia上相同原始政策的更多信息。