Ajax XML请求无法正常工作

时间:2011-12-08 03:56:16

标签: javascript xml ajax google-chrome

当我选择下拉列表中的值时,我正在尝试执行一个简单的ajax请求来加载某些XML。 XML包含我根据用户选择的内容切换的图像路径。它在Firefox中运行良好(我没有得到任何Javascript错误),但由于某种原因,Chrome中没有任何反应。这就是我到目前为止所做的:

        <script type="text/javascript">
        function loadXMLDoc(url) {

            var xmlhttp;
            var txt, txtBase, txtOverlay1, txtOverlay2, txtBlack, name, img;

            if (window.XMLHttpRequest){
              // code for IE7+, Firefox, Chrome, Opera, & Safari
              xmlhttp=new XMLHttpRequest();
              xmlhttp.overrideMimeType("text/xml");
            }
            else { 
              // code for IE6 & IE5
              xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
            }
            xmlhttp.onreadystatechange=function() {

                if (xmlhttp.readyState==4 && xmlhttp.status==200) { 

                    txtBase='<img id="original"';
                    txtOverlay1='<img id="overlay1" class="overlay"';
                    txtOverlay2='<img id="overlay2" class="overlay"';
                    txtBlack='<img id="opacity" class="overlay"';

                    img=xmlhttp.responseXML.documentElement.getElementsByTagName("IMG");
                    name=img[0].getElementsByTagName("NAME");

                    txtBase = txtBase + name[0].firstChild.nodeValue + '/>';
                    txtOverlay1 = txtOverlay1 + name[1].firstChild.nodeValue + '/>';
                    txtOverlay2 = txtOverlay2 + name[2].firstChild.nodeValue + '/>';
                    txtBlack = txtBlack + name[3].firstChild.nodeValue + '/>';

                    txt = txtBase + txtOverlay1 + txtOverlay2 + txtBlack;
                    document.getElementById('inner_container').innerHTML = txt;
                    $(".red").css({"font-size":"2.0em"});
                    $(".blue, .green").css({"font-size":"1.0em"});
                }
            }
            xmlhttp.open("GET",url,true);
            xmlhttp.send();
        }
    </script>

我用它来称呼它。

            <select>
                <option id="selected">Select a car</option>
                <option onclick="loadXMLDoc('http://www.brandybrowauto.com/files/nissan.xml')">Nissan</option>
                <option onclick="loadXMLDoc('http://www.brandybrowauto.com/files/mazdaspeed3.xml')">Mazdaspeed3</option>
            </select>

任何有助于在Chrome中使用此功能的帮助都将非常受欢迎,同时也提供了使代码更好的任何提示。我是ajax的初学者。

2 个答案:

答案 0 :(得分:2)

此代码的任何部分是否适用于您网站上的Chrome?如果是这样,它会走多远?如果您还没有,则应使用Chrome开发人员的工具并在javascript中设置断点并逐步执行代码,直至其停止按预期工作。

如果我不得不猜测发生了什么 - Chrome可能不喜欢你正在使用的事实

xmlhttp.onreadystatechange

这条线应该是,而不是:

xmlhttp.onload

编辑内容:

在查看您的代码后(根据您的评论回复),您似乎永远无法触发选项的onclick事件。我玩了代码来测试它,确保它不会运行。以下情况根本不会发生,因为此事件不会触发。

<option onclick="alert('test');">Nissan</option>

INSTEAD,不要使用选项中的事件。使用select中的onchange事件。

<select onchange="alert(options[selectedIndex].text);">

请试试这个并告诉我它是否让你高兴。您可以使用此信息然后触发您的xmlhttp逻辑。

答案 1 :(得分:1)

请检查状态代码。可能发生之前已请求xml文件并且服务器发送另一个状态代码,例如, 304

jQuery自动将一个随机参数附加到url以防止这种情况发生(你也可以这样做)。


修改

似乎点击处理程序没有触发。 请将此标记用于选择:

<select onchange="if(this.value)loadXMLDoc(this.value)">
  <option value="0" id="selected" selected="selected">Select a car</option>
  <option value="/files/nissan.xml">Nissan</option>
  <option value="/files/mazdaspeed3.xml">Mazdaspeed3</option>
</select>