【问题标题】:call ajax in cakephp view form以 cakephp 视图形式调用 ajax
【发布时间】:2014-04-11 05:21:45
【问题描述】:

我正在创建一个视图,其中三个下拉菜单将起作用 在选择角色时,请求服务器而不是另一个下拉列表中的名称而不是请求服务器
,选择数据并在视图中为用户日志生成一个新表。

我已经编写了代码,但它不起作用。

 user_activities.ctp

      <script type="text/javascript">var myBaseUrl = '<?php echo $this->base; ?>'
    var serverName='<?php echo $_SERVER['SERVER_NAME'];?>';

    function getname(name) { 
        var strURL=myBaseUrl+('/manageUsers/userActivities/')+name;
            function getXMLHTTP() {
           var x = false;
           try {
              x = new XMLHttpRequest();
           }catch(e) {
             try {
                x = new ActiveXObject("Microsoft.XMLHTTP");
             }catch(ex) {
                try {
                    req = new ActiveXObject("Msxml2.XMLHTTP");
                }
                catch(e1) {
                    x = false;
                }
             }
          }
          return x;
        }
      var req = getXMLHTTP();
      if (req) {
       req.onreadystatechange = function() {
            if (req.readyState == 4) {
             // only if "OK"
                 if (req.status == 200) {      

            document.getElementById('manageUsersName').innerHTML=req.responseText;

             } else {
   alert("Problem while using XMLHTTP:\n" + req.statusText);
                     }
        }    

       }   

       req.open("GET", strURL, true);
        req.send(null);
       }  
     }


     </script>

   <script type="text/javascript">
      $(document).ready(function(){

$('#manageUsersRole').change(function(){ 
    var selectedValue = $(this).val();
    //var id=fieldName = $(this).attr('id');

    getname(selectedValue);

    $.ajax({
    type : "POST",
          url  : myBaseUrl+('/manageUsers/userActivities/')+selectedValue, //pass query    
  string to server
         success : function(opt)
         {
     document.getElementById('manageUsersName').innerHTML = opt;  
          }
        })
        });
        });

   </script>


    <?php echo $this->Form->create('manageUsers');

        $role = array('admin' => 'Admin', 'driver' => 'Driver');
          echo $this->Form->input('role',array('type' => 'select', 'options' => 
          $role,'label' => 'Select User Type','default' => 'driver'));
      echo $this->Form->input('name',array('type' => 'select','options'=>$userList,  
      'label' => 'Select User name'));
        ?>


  I don't know if url is generating true or not How can I check????
 and what data is coming from function



  public function userActivities($role=NULL)
{
    $this->loadModel('ActivityLog');

    $userLists = $this->ActivityLog->find('list', array(
     'fields' => array('ActivityLog.user_name'),
     'conditions' => array('ActivityLog.role =' => $role)

 ));

 $userList=array();
 foreach($userLists as $key=>$value )
 {
    $userList[$value]=$value;
 }


    $this->set('userList',$userList);

} 

请求正在服务器上进行。我已经检查过萤火虫。改变是有效的 但是第二个下拉菜单中没有任何响应。只有两个值 第一个下拉菜单在第二个下拉菜单中重复。你能建议一些改变吗?

【问题讨论】:

  • 您在网络选项卡和控制台中遇到什么错误?
  • 你认为我的代码有效吗?我收到错误 ReferenceError: getXMLHTTP is not defined var req = getXMLHTTP();
  • 我现在在顶部添加了这个函数 function getXMLHTTP() { var x = false;尝试 { x = new XMLHttpRequest(); }catch(e) { 尝试 { x = new ActiveXObject("Microsoft.XMLHTTP"); }catch(ex) { try { req = new ActiveXObject("Msxml2.XMLHTTP"); } 捕捉(e1){ x = 假; } } } 返回 x; }

标签: php jquery ajax cakephp


【解决方案1】:

我更新的代码是

var myBaseUrl = 'base; ?>' var serverName='';

    function getXMLHTTP() {
           var x = false;
           try {
              x = new XMLHttpRequest();
           }catch(e) {
             try {
                x = new ActiveXObject("Microsoft.XMLHTTP");
             }catch(ex) {
                try {
                    req = new ActiveXObject("Msxml2.XMLHTTP");
                }
                catch(e1) {
                    x = false;
                }
             }
          }
          return x;
        }

    function getname(name) { 
        var strURL=myBaseUrl+('/manageUsers/userActivities/')+name;
      var req = getXMLHTTP();
      if (req) {
       req.onreadystatechange = function() {
            if (req.readyState == 4) {
             // only if "OK"
                 if (req.status == 200) {      
                  document.getElementById('manageUsersName').innerHTML=req.responseText;

                         } else {
                      alert("Problem while using XMLHTTP:\n" + req.statusText);
                     }
        }    

       }   

       req.open("GET", strURL, true);
        req.send(null);
       }  
     }

  <script type="text/javascript">
$(document).ready(function(){

      $('#manageUsersRole').change(function(){ 
    var selectedValue = $(this).val();
    //var id=fieldName = $(this).attr('id');

    getname(selectedValue);


        });
        });

   </script>


   <?php echo $this->Form->create('manageUsers');

       $role = array('admin' => 'Admin', 'driver' => 'Driver');
             echo $this->Form->input('role',array('type' => 'select', 'options' => 
       $role,'label' => 'Select User Type','default' => 'driver'));
       echo $this->Form->input('name',array('type' => 'select','options'=>$userList, 
   'label' => 'Select User name'));

   echo $this->Form->end('Submit');


 ?>

and controller code is 



     public function userActivities($role=NULL)
{
    $this->loadModel('ActivityLog');
    // $this->layout = 'ajax';
    $userLists = $this->ActivityLog->find('list', array(
    'fields' => array('ActivityLog.user_name'),
    'conditions' => array('ActivityLog.role =' => $role)

));

$userList=array();
 foreach($userLists as $key=>$value )
 {
    $userList[$value]=$value;
 }


    $this->set('userList',$userList);

}



 Now only problem I am facing is I get two drop down .
   on selecting value on first dropdown, value changes in 2nd dropdown but in 2nd 

dropdown
 I  am getting values of 1st dropdown + values of server response

例如: 从 (Admin,Driver) 中选择管理员 我正在进入第二个下拉菜单(管理员、驱动程序、管理员名称)。

我的代码有什么问题。

我收到了 html 代码作为响应 选择用户类型

    <option value="admin">Admin</option>

     <option value="driver" selected="selected">Driver</option>

     </select></div>
    <div class="input select"><label for="manageUsersName">Select User name</label>
     <select name="data[manageUsers][name]" id="manageUsersName">
     <option value="dipanshu">dipanshu</option>
  <option value="vivek">vivek</option>
 <option value="varun">varun</option>

    </select></div>
   <div class="submit"><input  type="submit" value="Submit"/></div></form>

【讨论】:

  • 除非这现在有效,否则请删除此答案并更新您的原始问题。
猜你喜欢
  • 1970-01-01
  • 2021-06-03
  • 1970-01-01
  • 1970-01-01
  • 2016-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-07
相关资源
最近更新 更多