Witam mam taki problem , otóż tworzę sobie pewien serwis i potrzebuję funkcjonalności dzięki której po wybraniu jednej opcji z selecta (są to państwa) w drugim formularzu automatycznie wczytują się regiony tego kraju . Napisałem oto taki kod w JS/Ajax
dane wczytują się bezpośrednio z pliku XML wygenerowanego przez PHP
Parę godzin nauki Ajaxa i JS oraz pisania kodu . Ale niestety działa to tylko w Firefox natomiast Internet Explorer wariuje a google chrome nawet nie ruszy . Proszę o pomoc mam mierne doświadczenie w Ajaxie
Ozłocę kogoś kto mi rozwiąże ten przykład
<script language="javascript"> var XMLHttpRequestObject = false;
if (window.XMLHttpRequest) {
XMLHttpRequestObject = new XMLHttpRequest();
}else if (window.AtiveXObject) {
XMLHttpRequestObject = new ActiveXObject("Microsoft.XMLHTTP");
}
function getData(dataSource,divID,val)
{
if(XMLHttpRequestObject) {
var obj = document.getElementById(divID);
dataSource += val.options[val.selectedIndex].value;
XMLHttpRequestObject.open("GET", dataSource);
XMLHttpRequestObject.onreadystatechange= function()
{
if (XMLHttpRequestObject.readyState == 4 && XMLHttpRequestObject.status == 200) {
xmlDocument= XMLHttpRequestObject.responseXML;
region= xmlDocument.getElementsByTagName("region");
var il = obj.options.length -1;
// usuwanie
for(id=0;id<= il; id++ ) {
obj.options.remove(id);
}
// usuwanie
for(id=0;id<=region.length -1 ; id++ ) {
var op=document.createElement("option");
try
{
// for IE earlier than version 8
obj.options.add(op,null);
obj.options[id].value=id;
obj.options[id].text ="ee";
}
catch (e)
{
obj.add(op,null);
}
}
for(id=0 ; id<= region.length -1 ; id++ ) {
obj.options[id].text = region[id].firstChild.nodeValue;
obj.options[id].value = region[id].id;
}
}
}
XMLHttpRequestObject.send(null);
}
else
{
alert("problem");
}
}
zamieszczam cały widok
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
<title>Panel WWW</title>
<?PHP $this->setCss('admin_main.css'); ?>
<?PHP $this->setJs('jquery.js'); ?>
<?PHP $this->setJs('function.js'); ?>
<script language="javascript">
var XMLHttpRequestObject = false;
if (window.XMLHttpRequest) {
XMLHttpRequestObject = new XMLHttpRequest();
}else if (window.AtiveXObject) {
XMLHttpRequestObject = new ActiveXObject("Microsoft.XMLHTTP");
}
function getData(dataSource,divID,val)
{
if(XMLHttpRequestObject) {
var obj = document.getElementById(divID);
dataSource += val.options[val.selectedIndex].value;
XMLHttpRequestObject.open("GET", dataSource);
XMLHttpRequestObject.onreadystatechange= function()
{
if (XMLHttpRequestObject.readyState == 4 && XMLHttpRequestObject.status == 200) {
xmlDocument= XMLHttpRequestObject.responseXML;
region= xmlDocument.getElementsByTagName("region");
var il = obj.options.length -1;
// usuwanie
for(id=0;id<= il; id++ ) {
obj.options.remove(id);
}
// usuwanie
for(id=0;id<=region.length -1 ; id++ ) {
var op=document.createElement("option");
try
{
// for IE earlier than version 8
obj.options.add(op,null);
obj.options[id].value=id;
obj.options[id].text ="ee";
}
catch (e)
{
obj.add(op,null);
}
}
for(id=0 ; id<= region.length -1 ; id++ ) {
obj.options[id].text = region[id].firstChild.nodeValue;
obj.options[id].value = region[id].id;
}
}
}
XMLHttpRequestObject.send(null);
}
else
{
alert("problem");
}
}
</script>
</head>
<body>
<div id="contener">
<?PHP $this->menu->render(); ?>
<div id="worklabel">
<form action="index.php?act=admin&exec=addprzewoznik&func=add" method="POST">
<table class="row-table">
<tr class="row-input"><td>Nazwa Firmy</td></tr>
<tr class="row-input"><td><input type="text" name="name" class="row"></td></tr>
<tr class="row-input"><td>Email</td></tr>
<tr class="row-input"><td><input type="text" name="email" class="row"></td></tr>
<tr class="row-input"><td>Telefon</td></tr>
<tr class="row-input"><td><input type="text" name="phone" class="row"></td></tr>
<tr class="row-input"><td>Strona WWW</td></tr>
<tr class="row-input"><td><input type="text" name="www" class="row"></td></tr>
<tr class="row-input"><td>Kraj</td></tr>
<tr class="row-input"><td><select name="country" class="row" onChange="getData('index.php?act=ajax&exec=country&id=','reg',this)" >
<?PHP foreach($this->country as $cs) { ?> <option value="
<?PHP echo $cs['id_country']; ?>" >
<?PHP echo $cs['name_country']; ?> </option>
<?PHP } ?></select></td></tr>
<tr class="row-input"><td>Nazwa Regionu</td></tr>
<tr class="row-input"><td><select name="reg" id="reg">
<?PHP foreach($this->reg as $rg) { ?> <option value="
<?PHP echo $rg['id_region']; ?>" >
<?PHP echo $rg['name_region']; ?> </option>
<?PHP } ?></select></td></tr>
<tr class="row-input"><td>Adres</td></tr>
<tr class="row-input"><td><input type="text" name="adres" class="row"></td></tr>
<tr class="row-input"><td>Opis</td></tr>
<tr class="row-input"><td><textarea name="description" class="row" style="height:100px;"></textarea></td></tr>
<tr class="row-input"><td>Logo</td></tr>
<tr class="row-input"><td><input type="file" name="logo" class="row"></td></tr>
<tr class="row-table-page"><td><input type="submit" value="Dodaj Przewoźnika" style="background:white;"></td></tr>
</table>
</form>
<center>
<?PHP echo $this->info; ?> </center>
</div>
</div>
</body>
</html>
dane w xml przykładowo
<?xml version="1.0" encoding="UTF-8"?>
<options>
<region id="1">Świętokrzyskie</region>
</options>
ps rozwiązanie było banalne . Google chrome podchodziło zbyt rygorystycznie do pliku XML . Musiałem wyeliminować wszystkie spacje itp w pliku generującym .
Teraz mam problem tylko z IE (IMG:
style_emoticons/default/biggrin.gif) który źle operuje na znacznikach option z select (IMG:
style_emoticons/default/biggrin.gif)
Ten post edytował larson7221 22.09.2012, 17:09:57