ajax脚本在IE中不起作用

时间:2011-07-01 17:34:01

标签: php javascript ajax internet-explorer

我在IE中遇到这个ajax脚本的问题,因为它不起作用,它在FF和Chrome中完美地工作但在IE中它根本不起作用!有两个下拉框,根据我在第一个下拉框中选择的第二个下拉框,显示所选城市的显示值。

    <select class="selectDest" name="Prej" onChange="getState(this.value)">
        <option></option>
        '.funksionet::all_directions().'
    </select>

这是第二个下拉框:

    <div id="statediv"><select class="selectDest" name="deri">
        <option></option>
    </select></div>

这是ajax函数:

<script language="javascript" type="text/javascript">
function getXMLHTTP() { //function to return the xml http object
        var xmlhttp=false;  
        try{
            xmlhttp=new XMLHttpRequest();
        }
        catch(e)    {       
            try{            
                xmlhttp= new ActiveXObject("Microsoft.XMLHTTP");
            }
            catch(e){
                try{
                xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
                }
                catch(e1){
                    xmlhttp=false;
                }
            }
        }

        return xmlhttp;
    }

    function getState(countryId) {      

        var strURL="findState.php?country="+countryId;
        var req = getXMLHTTP();

        if (req) {

            req.onreadystatechange = function() {
                if (req.readyState == 4) {
                    // only if "OK"
                    if (req.status == 200) {                        
                        document.getElementById(\'statediv\').innerHTML=req.responseText;                       
                    } else {
                        alert("There was a problem while using XMLHTTP:\n" + req.statusText);
                    }
                }               
            }           
            req.open("GET", strURL, true);
            req.send(null);
        }       
    }
</script>

这是findstate.php文件:

<?php 
require_once 'includes/constants.php';
$country = $_GET['country'];
$link = mysql_connect(DB_SERVER, DB_USER, DB_PASSWORD); //changet the configuration in required
if (!$link) {
    die('Could not connect: ' . mysql_error("1"));
}
mysql_select_db(DB_NAME);
$query="SELECT * FROM costs WHERE prej = '$country';";
$result=mysql_query($query) or die("2");
?>
<select class="selectDest" name="Deri">
 <option></option>
  <?php while($row = mysql_fetch_array($result)) { 
    print'<option>'.$row['deri'].'</option>';

  }
 ?>
</select>

我真的需要做这项工作,如果有人愿意帮助我,我将不胜感激。因为我对JavaScript不好!但是,如果我无法做到这种跨浏览器,那么我想知道,我不会这样做。

3 个答案:

答案 0 :(得分:2)

$country = $_GET['country'];
$query="SELECT * FROM costs WHERE prej = '$country';";

我知道,这是offtopic,但它并不好

答案 1 :(得分:1)

在IE中,事件处理程序内的“this”指针不是导致事件的元素。这是窗口对象。要以跨浏览器的方式执行此操作,我建议您通过阅读以下内容来真正了解它正在做的所有事情:https://developer.mozilla.org/en/DOM/element.addEventListener

使用jQuery会有所帮助,但我仍然认为你应该理解它以避免将来出现问题:)

答案 2 :(得分:1)

Javascript基础在每个浏览器上大致相同,但DOM,AJAX和其他一些部分有很多不同的实现(特别是IE喜欢不同)。很久以前,很多非常聪明的javascript程序员决定停止这种痛苦并开发了javascript库。有很多javascript库可用,但在我看来最容易的是jquery。您可以查看代码以了解Jquery如何处理AJAX请求。如果你问我,代码真的很好。 Jquery有很好的文档,使用Jquery时你的代码看起来会更清晰。

我在jsfiddle上共享了一个小片段,它只在几行中执行了一个http POST请求(警报输出),可以在http://jsfiddle.net/9yC8h/2/找到。 /echo/html/只是一个输出html的网址,如jsfiddle所解释。