2011-06-07 72 views
0

嗨,我有兩個dropdowns,我在第一個基礎上填充第二個。我的第一選擇是IE不填充通過AJAX請求選擇

<select name="projects" id="projects" onchange="populate_users(this.value);"> 
<option value='1'>ABC</option> 
<option value='2'>DEF</option> 
</select> 

我填充第二個選擇框第一個基礎是

<select name="users" id="users"> 
</select> 

這裏上我populate_users方法

function populate_users(project_id) 
{ 
var url='<?php echo($this->url(array(),'admin/clientproject1'));?>'; 
url2=url+'project_id='+project_id; 
//alert(url2); 
jQuery('#users').html('<div style="position:absolute;">'+jQuery('#users').html()); 
//ajax call 
jQuery.ajax({url:url2,success:function(data){jQuery('#users').html(data);}}); 
} 

而上admin/clientproject1我只需查詢表格並開始一個循環來繪製選項lik E該

$rd=$db->fetchAll($q); 
for($i = 0; $i < count($rd); $i++) 
{ 
    ?> 
    <option value="<?php echo($rd[$i]->id);?>"> 
    <?php echo($rd[$i]->username);?></option> 
    <?php 
} 
?> 

​​由具有值。第二個select已填充,並且所有值都顯示在Firefox中,但在IE中它只顯示空白下拉列表並且未顯示任何錯誤。

+0

什麼是錯的代碼格式。 – binaryLV 2011-06-07 11:37:47

+0

@binaryLV。對不起,夥計沒有選擇你的觀點? – 2011-06-07 11:42:54

+0

不要使用PRE和'<'而不是縮進4個空格 – mplungjan 2011-06-07 11:44:11

回答

1

您應該返回值的json字符串並在javascript中創建選項元素。然後將這些選項元素注入到您的選擇中。多一點編碼,但它更好。

0

每當我看到單詞AJAX,IE,而不是填充,我想到了IE緩存,以及它如何不與AJAX玩。由於這個問題是基於瀏覽器的,我不明白它是如何成爲你的實際php的問題,格式似乎是正確的,也許嘗試在php頁面查詢數據庫設置一些標題。

header("Expires: Sun, 19 Nov 1978 05:00:00 GMT"); 
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); 
header("Cache-Control: no-store, no-cache, must-revalidate"); 
header("Cache-Control: post-check=0, pre-check=0", false); 
header("Pragma: no-cache"); 
+1

或者這樣做:'url2 = url +'?project_id ='+ project_id +'&rnd ='+ new Date()。getTime()' – mplungjan 2011-06-07 12:06:54

0

我的解決方案是創建 '選項增加' 客戶端在服務器和javascript 'EVAL' 合格的Ajax結果:

Server Sample PHP code Populate Select : 
leetablaIE.php : 

     $DBName=$_GET["db"]; 
     $tabla=$_GET["tabla"]; 
     $Query=$_GET["query"]; 
     $id=$_GET["id"]; 
     $User="???????"; 
     $Host="????????"; 
     $Password="????????"; 
     $Link=mysql_connect($Host, $User, $Password); 
     if (!$Link) { 
     die('Could not connect: ' . mysql_error()); 
     } 
     mysql_select_db($DBName, $Link) or die('Could not select database.'); 
     $Result=mysql_db_query ($DBName , $Query , $Link); 
     echo 'var obj_option;'; 
     echo "obj_option = document.createElement('option');" ; 
     echo "obj_option.setAttribute('value', '');"; 
     echo "obj_text = document.createTextNode('".utf8_encode('Select Value')."');" ; 
     echo "obj_option.appendChild(obj_text);"; 
     echo "document.getElementById('$id')".".appendChild(obj_option);"; //myselect 

     while($Row = mysql_fetch_array($Result)) { 
     $valor=utf8_encode($Row[0]); 
     $texto=utf8_encode($Row[1]); 
     echo "obj_option = document.createElement('option');" ; 
     echo "obj_option.setAttribute('value', '".$valor."');"; 
     echo "obj_text = document.createTextNode(\"".$texto."\");" ; 
     echo "obj_option.appendChild(obj_text);"; 
     echo "document.getElementById('$id')".".appendChild(obj_option);"; //myselect 
     } 
     mysql_free_result($Result); 

在JavaScript客戶端:

function leetabla(db,tabla,query,id,bro){ 
// bro = passing browser ex: MSIE 
// id = passing id select to populate in example myselect 
// db = database 
// tabla = table (mysql id this case) 
// query = query you need to populate ('select ....') 
//////////////////////////////////////////////////// 

if (window.XMLHttpRequest) 
{ 
xmlhttp=new XMLHttpRequest(); 
} 
else 
{ 
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
} 
xmlhttp.onreadystatechange=function() 
{ 
if (xmlhttp.readyState==4 && xmlhttp.status==200) 
{ 
if(bro!='MSIE'){ 
document.getElementById(id).innerHTML=""; 
document.getElementById(id).innerHTML=xmlhttp.responseText; 
} 
else 
{ 
//alert(xmlhttp.responseText); 
eval(xmlhttp.responseText); 
} 
} 
} 
if(bro!='MSIE'){ 
//alert(query); 
//normal populate code not in this code 'leetabla.php' 
xmlhttp.open("GET","leetabla.php? db="+db+"&tabla="+tabla+"&query="+query+"&id="+id,true); 
} 
else 
{ 
//alert(query); 
// call to php script to IE case leetablaIE.php (upper sample) 
xmlhttp.open("GET","leetablaIE.php? db="+db+"&tabla="+tabla+"&query="+query+"&id="+id,true); 
} 
xmlhttp.send(); 
}