2010-12-30 12 views
2

Hallo alle Ich arbeite in einem PHP-Projekt. Ich bin mit einem Problem im Zusammenhang mit Ajax stecken geblieben.Ajax arbeitet mit Javascript

Ich habe eine Auswahlbox für Unternehmen, auf deren Auswahlabteilung mit Ajax angezeigt wird, und bei der Auswahl der Abteilung aus der Abteilung wählen Sie das Feld zusammen mit einer anderen Benutzergruppe wählen Sie die Liste der Benutzer.

Jetzt bei Änderung der Benutzergruppe I Sende eine Anfrage an den Server unter Verwendung von Ajax als Benutzergruppen-ID und Abteilungs-ID, um die jeweiligen Benutzer zu holen. Aber wenn ich die Abteilung erneut auswähle, kann ich die neue Benutzerliste nicht bekommen, da diese Abteilungsliste von ajax erzeugt wird und Ajax nicht mit Javascript arbeitet.

-Code Ich arbeite mit:

Auswahlbox wählen Unternehmen

<select name="companyname" id="companyname" onchange="javascript:dochange(this.value);"> 
    <option value="-1">-----Select Company-----</option> 
      <?php foreach($user_obj->getUserCompanyname() as $key => $value){ 
     $selected = ''; 
     if($value['company_id'] == $user_obj->user_company_id){ 
     $selected = 'selected="selected"'; 
     } 
     ?> 
     <option value="<?php echo $value['company_id'];?>" 
<?php echo $selected;?>><?php echo $value['company_name'];?></option> 
     <?php }?> 

Javascript Ajax auszuführen

<script> 
//Inint_AJAX funnction is excluded as it has to do anything with requirement 
function dochange(val) { 
var req = Inint_AJAX(); 
req.onreadystatechange = function() { 
if (req.readyState==4) { 
     if (req.status==200) { 
      document.getElementById('selectdepartment').innerHTML=""; 
      document.getElementById('selectdepartment').innerHTML=req.responseText; //retuen value 
     } 
} 
}; 
req.open("GET", "company.php?val="+val); //make connection 
req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=iso-8859-1"); // set Header 
req.send(null); //send value 
} 
</script> 

company.php

$val=$_GET['val']; 

    echo "<select name='departmentname' id='departmentname'>\n"; 
    echo "<option value='-1'><b>Select Department</b></option>\n"; 
    foreach($user_obj->getUserDepartmentname($val) as $k=>$vals){ 
    echo "<option value='".$vals['department_id']."'>".$vals['department_name']."</option>"; 
    }     
echo "</select>\n<br>"; 
echo " <span class='asterisk>NOTE:Please (Re)Select the User Group everytime you change department.</span>"; 

User Group Select Box

<select name="usergroupname" 
onchange="javascript:dochangereport(this.value,document.getElementById('departmentname').value); 
    dochangeoverride(this.value,document.getElementById('departmentname').value);" id="usergroupname"> 
    <option value="-1">Select User Group</option> 
    <?php 
    foreach($user_obj->getUserGroupName() as $gkey=>$gval){ 
    $gselect = ''; 
    if($gval['usergroup_id'] == $user_obj->user_group_id){ 
    $gselect = 'selected="selected"'; 
    } 
    ?> 
    <option value="<?php echo $gval['usergroup_id'];?>" 
    <?php echo $gselect;?>><?php echo $gval['usergroup_name'];?> 
    </option> 
    <?php }?> 
    </select> 

Funktionsaufruf Ajax-Aufruf

<script> 
function dochangereport(val,dep) { 
var req = Inint_AJAX(); 
req.onreadystatechange = function() { 
if (req.readyState==4) { 
     if (req.status==200) { 
      document.getElementById('selectreport').innerHTML=""; 
      document.getElementById('selectreport').innerHTML=req.responseText; //retuen value 
     } 
} 
}; 
req.open("GET", "reportto.php?val="+val+"&dep="+dep); //make connection 
req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=iso-8859-1"); // set Header 
req.send(null); //send value 
} 
</script> 

**reportto.php** 

    $val=$_GET['val']; 
    $dep=$_GET['dep']; 
    echo "<select name='reportingto[]' multiple='multiple' size='3'>\n"; 
     echo "<option value='-1'><b>Select Supervisor(s)</b></option>\n"; 
     foreach($user_obj->getUserReportingto($val,$dep) as $rkey=>$rval){ 
echo "<option value='".$rval['user_id']."'>".$rval['user_fname']." ".$rval['user_fname']." </option>"; 
}echo "</select>\n"; 

könnte mir jemand helfen in dieser heraus?

+0

Könnten Sie bitte etwas Code zeigen? – acm

+0

Können Sie einen Code posten, der nicht funktioniert? –

+0

Betrachten Sie die bearbeitete Frage mit dem Code, den ich verwende –

Antwort

2

Ich werde hier erraten: Sie sind wahrscheinlich stattdessen so etwas wie

$('select.department').change(function() { (...ajax...)}); 

verwenden, Verwendung:

$('select.department').live('change', function() { (...ajax...)}); 

Dies wird auch alle Elemente übereinstimmen, die später hinzugefügt werden, und passen Sie Ihre jQuery Wähler. Siehe auch: http://api.jquery.com/live/.

EDIT:

Ok, so dass ich falsch geraten.Wenn Sie jQuery nicht verwenden, müssen Sie Event-Bubbling (http://www.quirksmode.org/js/events_order.html) verwenden (BEARBEITEN: anscheinend onchange bläst nicht im IE, siehe Does the onchange event propagate?) oder fügen Sie den Ereignishandler zu dem neu erstellten <select> jedes Mal, wenn Sie es aktualisieren, mit

if (req.status==200) { 
     document.getElementById('selectreport').innerHTML=""; 
     document.getElementById('selectreport').innerHTML=req.responseText; //retuen value 
     document.getElementById('reportingto').onchange = function() { 
      var val = this.value, 
       department = document.getElementById('departmentname').value; 

      dochangereport(val, department); 
      dochangeoverride(val, department); 
     } 
    } 

Und dann eine ID zu Ihrem ajaxed selectbox hinzuzufügen, wie folgt aus:

(reportto.php) 
echo "<select id='reportingto' name='reportingto[]' multiple='multiple' size='3'>\n"; 

Viel Glück!

+0

Wie kann Jquery mit für diese Anforderung verwenden –

+0

Ah, Sie verwenden nicht jQuery ... so vermutete ich falsch :) Ich werde meine Antwort ein wenig bearbeiten. –

+0

WoWo Warten Sie einfach ein min champ nur ein wenig zu erarbeiten .. Wie geht das, wie ich denke, Ajax kann nicht mit dem Javascript darin umgehen –

0

fand ich andersrum ...

Ich habe gerade die Ajax-functiona als

ich nur die Container-ID ändern Feld ID caling

function dochange(val) { 
var req = Inint_AJAX(); 
req.onreadystatechange = function() { 
if (req.readyState==4) { 
     if (req.status==200) { 
      document.getElementById('departmentname').innerHTML=""; 
      document.getElementById('departmentname').innerHTML=req.responseText; //retuen value 
     } 
} 
}; 
req.open("GET", "company.php?val="+val); //make connection 
req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=iso-8859-1"); // set Header 
req.send(null); //send value 
} 

und veränderte Gesellschaft zu wählen. PHP-Datei zu

$val=$_GET['val']; 


    echo "<option value='-1'><b>Select Department</b></option>\n"; 
    foreach($user_obj->getUserDepartmentname($val) as $k=>$vals){ 
    echo "<option value='".$vals['department_id']."'>".$vals['department_name']."</option>"; 
    }     

Und damit gab mir alle erforderlichen Ergebnis ..

Verwandte Themen