2011-07-01 10 views
1

IEでこのajaxスクリプトに問題があります。機能しないため、FFとChromeでは完全に動作しますが、IEでは動作しません。 2つのドロップダウンボックスがあり、最初のドロップダウンボックスで選択したものに応じて、選択した都市の値が表示されます。ajaxスクリプトがIEで動作しません

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

これは2番目のドロップダウンボックスです:

<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> 

I本当にこの仕事をする必要がある、私は大いにaもし誰かが私を助けようとしているならば、これを賞賛してください。私は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 ||これ)。または、要素にIDを与えても構わない場合は、document.getElementById( 'yourid')。value(this.valueの代わりに)を使用します。 – InfinitiesLoop

1

Javascriptのファンダメンタルズはすべてのブラウザでほぼ同じで良いではありませんが、DOM、AJAXや他のいくつかの部品が異なる実装の多くを持っている(特にIEがあることをするのが好きです異なる)。長い間、本当にスマートなjavascriptプログラマーの多くは、この痛みを止めることを決め、javascriptライブラリーを開発しました。利用できるjavascriptライブラリがたくさんありますが、私の意見では最も簡単なものはjqueryです。コードを見れば、JQueryがAJAXリクエストをどのようにして行ったのかを見ることができます。あなたが私に尋ねるなら、コードは本当に素晴らしいです。 Jqueryは非常に優れたドキュメンテーションを持っており、Jqueryを使用するとコードがより洗練されたように見えます。

私はjsfiddle上で少しのスニペットを共有しました。これは、http POST要求(アラート出力)をわずか2行で行います。これはhttp://jsfiddle.net/9yC8h/2/です。 /echo/html/ jsfiddleで説明されているhtmlを出力するurlだけです。

関連する問題