Ajax работает с Javascript - PullRequest
       0

Ajax работает с Javascript

2 голосов
/ 30 декабря 2010

Привет всем Я работаю в проекте PHP. Я застрял с проблемой, связанной с Ajax.

У меня есть поле выбора для компании, в которой отдел выбора отображается с помощью ajax, и при выборе отдела из поля выбора отдела вместе с другим полем выбора группы пользователей я получаю список пользователей.

Теперь при изменении группы пользователей я отправляю запрос на сервер, используя ajax в качестве идентификатора группы пользователей и идентификатора отдела, чтобы получить соответствующих пользователей. Но когда я повторно выбираю отдел, я не могу получить новый список пользователей, так как этот список отделов создается из ajax, а Ajax не обрабатывает Javascript.

Код, с которым я работаю:

установите флажок, чтобы выбрать компанию

 <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

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

Поле выбора группы пользователей

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

функция, вызывающая вызов ajax

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

Может ли кто-нибудь помочь мне в этом?

Ответы [ 2 ]

2 голосов
/ 30 декабря 2010

Я собираюсь угадать здесь: вы, вероятно, используете что-то вроде

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

Вместо этого используйте:

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

Это также будет соответствовать любым элементам, которые добавляются позже исоответствует вашему селектору jQuery.Смотрите также: http://api.jquery.com/live/.

РЕДАКТИРОВАТЬ:

Хорошо, так что я угадал.Если вы не используете jQuery, вам придется использовать всплывающее окно события (http://www.quirksmode.org/js/events_order.html) (РЕДАКТИРОВАТЬ: очевидно, onchange не всплывает в IE, см. Распространяется ли событие onchange? ) или добавьте обработчик событий во вновь созданный <select> каждый раз, когда вы обновляете его, используя

  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);
      }
  }

, а затем добавьте идентификатор в ajaxed selectbox, например:

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

Удачи!

0 голосов
/ 30 декабря 2010

Я нашел наоборот ...

Я просто изменил функцию вызова ajax на

Я просто изменил идентификатор контейнера, чтобы выбрать идентификатор поля

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
}

И изменил файл company.php на

$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>";
   }                  

И, следовательно, дал мне все необходимые результаты ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...