2011-07-01 62 views
1

我在IE中遇到了这个ajax脚本的问题,因为它不起作用,它可以在FF和Chrome中完美工作,但是在IE中它根本行不通!有两个下拉框,根据我在第一个下拉框中选择的具有所选城市的显示值的第二个下拉框。ajax脚本在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> 

我真的需要做这个工作,我会大大的ppreciate如果有人要帮我这个。因为我不擅长JavaScript!但是如果没有办法,我可以做这个跨浏览器,那么我想知道,我不会这样做。

+3

我会打赌使用[jQuery](http://api.jquery.com/jQuery.ajax/)将解决跨浏览器问题。 –

+0

更多的帮助? – TooCooL

回答

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

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

+1

我知道但无论如何谢谢;) – TooCooL

1

在IE中,事件处理程序中的“this”指针不是导致事件的元素。这是窗口对象。要做到这一点的一个跨浏览器的方式,我建议你真的了解所有它在做什么通过阅读:https://developer.mozilla.org/en/DOM/element.addEventListener

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

+0

所以我不能解决这个问题? – TooCooL

+1

你只需要知道如何去元素。在IE中,它是全局事件对象(event.srcElement)的srcElement。所以像(事件&& event.srcElement || this)。或者如果你不介意给元素一个ID,你可以直接使用document.getElementById('yourid')。value(而不是this.value)。 – InfinitiesLoop

1

的Javascript基本面有关每个浏览器相同,但DOM中,AJAX和其他一些地区有很多不同的实现(特别是IE喜欢被不同)。很久以前,很多真正聪明的JavaScript程序员决定停止这种痛苦并开发javascript库。有很多javascript库可用,但在我看来最容易的是jquery。您可以查看代码以查看Jquery如何在其中执行AJAX请求。如果你问我,代码真的很好。 Jquery具有非常好的文档,当使用Jquery时,你的代码看起来会更清晰。

我在jsfiddle上分享了一小段代码,它只需几行就可以找到http POST请求(警报输出),可以在http://jsfiddle.net/9yC8h/2/找到。 /echo/html/只是一个输出html的url,正如jsfiddle所解释的那样。