2011-07-01 63 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所解釋的那樣。