0

我有一个 div,其中包含一个带有两个下拉列表的表单。当在表单上按下提交按钮时,我有这个 javascript 函数......

function getExt(cgiScriptName,DivId){

        if ( document.getElementById(dropdown1) != null ){
            var value1 = document.getElementById(dropdown1).value;
        }
        if ( document.getElementById(dropdown2) != null ){
            var value2 = document.getElementById(dropdown2).value;
        }

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


        xmlhttp.onreadystatechange=function(){
            if (xmlhttp.readyState==4 && xmlhttp.status==200){
                document.getElementById(DivId).innerHTML=xmlhttp.responseText;
            }
        }

        cgiScriptName = cgiScriptName+"?selectOne="+value1+"&selectTwo="+value2;
        xmlhttp.open("GET",cgiScriptName,true);
        xmlhttp.send();

    // The content of DivId only changes if this if statement exists????  Why?????
        if ( document.getElementById(DivId) != null ){ alert('The Div is present'); }
}

该函数运行并使用 GET 来获取我想要的 HTML。我已经验证该函数可以很好地组装 GET 调用并从 CGI 脚本返回适当的 HTML。问题是只有当 if 语句在代码中时才会显示这个 HTML。否则整个页面将变为空白。主 div 不包含任何内容。为什么会这样?为什么那个 if 语句使这个函数起作用?以下是我网页的淡化版本...

<div id="main">

<div id="curr_div">
<form onsubmit="return getExt('CGIScript.cgi?','curr_div'); return false;">
<select id="dropdown1">...</select>
<select id="dropdown2">...</select>
<input type="submit" value="Submit"/>
</form>
<table>.....</table>
</div>

</div>
4

2 回答 2

0

几点:

您的 <form onsubmit=> 有两个返回语句。只有第一个可以工作。如果您将第一个 return 语句留在那里,您的 getExt 函数应该返回 false。否则取出第一个return,留下“return false”。此处返回 false 可防止将表单提交到服务器。否则,您将表单提交回加载此表单的 URL。

对 xmlhttp.send() 的调用只是发出请求,它不会阻止脚本的执行。我的猜测是你期待的不是。“警报”停止脚本的时间足够长,以便服务器处理响应并返回给您的回调。

于 2012-04-17T19:22:57.077 回答
0

element-id 变量可能会被其他上下文清除或重用。最后它是javascript内部使用的变量。

尝试将其复制到您的闭包中...另一方面,很可能 xmlhttp 对象已被清除,请尝试将其返回并保留在变量中...

只是两个猜测:

function getExt(cgiScriptName,DivId){

        if ( document.getElementById(dropdown1) != null ){
            var value1 = document.getElementById(dropdown1).value;
        }
        if ( document.getElementById(dropdown2) != null ){
            var value2 = document.getElementById(dropdown2).value;
        }

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

        var localdivid = DivId;
        xmlhttp.onreadystatechange=function(){
            if (xmlhttp.readyState==4 && xmlhttp.status==200){
                document.getElementById(localdivid).innerHTML=xmlhttp.responseText;
            }
        }

        cgiScriptName = cgiScriptName+"?selectOne="+value1+"&selectTwo="+value2;
        xmlhttp.open("GET",cgiScriptName,true);
        xmlhttp.send();

    return xmlhttp;
}
于 2012-04-17T19:25:10.723 回答