【问题标题】:Adding/Removing an element and updating its attribute via AJAX通过 AJAX 添加/删除元素并更新其属性
【发布时间】:2011-01-28 15:43:15
【问题描述】:

我正在构建一个允许用户在课程中添加/删除学生的小应用程序。每次我添加/删除课程时,数据库都会更新,并且我会更新用户的课程总数。当我将学生添加到课程中时,它可以正常工作,但是当我删除它们时,我返回了 0(来自我的 PHP 模型函数)。我相信这可能是 jquery 的问题,我想我可能需要使用克隆?所以我很抱歉这么长的帖子只是想确保你们有足够的代码来查看。 这是我在课程中添加和删除用户的 jQuery 代码:

function addUserToClass(user)
{

 //creates the a data string to send to the controller with the user's id and the course id
 var postString = "courseid="+$("#course option:selected").val()+"&uid="+user.find('input').val();

 //adds the user to the course list in the database
 $.post('index.php/admin/addUserToCourse',postString);

  $("#courseList").append(user);
  $('#courseList .addUser').text('(-)').removeClass('addUser').addClass('removeUser'); 
}

//removes a user from the selected course in the database as well as on the screen
function removeUserFromClass(user)
{
 var postString = "courseid="+$("#course option:selected").val()+"&uid="+user.find('input').val();

 //removes the user fromt the course in the database
 $.post('admin/removeUserFromCourse',postString);

 $(user).remove();
 $('#usertable').append(user);
 $('#usertable .removeUser').text('(+)').removeClass('removeUser').addClass('addUser'); 



}

这是我的 jQuery,用于更新他们所在的课程数量:

function updateUserCourses(uid)
{
var postString = 'uid='+uid.siblings(':input').val();

  $.post('index.php/admin/getUsersCourses', postString , function(data){

   data = jQuery.parseJSON(data);
   uid.siblings('.internalCounter').text(data.internal);
   uid.siblings('.externalCounter').text(data.external);

  })

}

不确定你是否需要这个,但我的 PHP(codeigniter 控制器)被调用的是:

 function getUsersCourses()
 {
  $this->load->model('course_model');
  $courses = $this->course_model->getUsersCourses($_POST['uid']);

  echo json_encode($courses);

 }

还有我的模型函数:

  function getUsersCourses($uid)
     {
      $external = array();
      $internal = array();
      $final = array();
      //Selects all of the courses the user has been added to
      $usersCourses = $this->db->query("SELECT courseid FROM final_course_list WHERE uid='{$uid}'");

  //If they have courses, proceed to process them
  if ($usersCourses->num_rows() > 0)
  {
   //For every course they have, we get the category of the course
   foreach($usersCourses->result() as $row)
   {
    $courseCat = $this->db->query("SELECT category FROM courses WHERE id = '{$row->courseid}'")->row_array();

    if($courseCat['category'] == 'External Topics')
    {
     array_push($external, $courseCat);
    }
    else if($courseCat['category'] == 'Internal Topics')
    {
     array_push($internal, $courseCat);
    }
   }

   //adds the internal and external amount of classes to one array
   $final['internal'] = count($internal);
   $final['external'] = count($external);
   $result = $final;
  }
  else
  {
   $result = 0;
  }

  return $result;

 }

【问题讨论】:

    标签: php javascript jquery codeigniter


    【解决方案1】:

    不应该removeUserFromClass阅读:

    $.post('index.php/admin/removeUserFromCourse',postString);
    

    【讨论】:

    • 我仔细检查了它的正确名称,我在事件侦听器中调用了 removeUserFromClass()(此处未列出)。感谢您的帮助并指出我不一致的命名约定。
    • @dan:我的意思是你的网址中缺少index.php/...现在解决了吗?
    • 你是对的,我错过了一个 index.php,它给了我一个 500 错误,我修复了它,但它仍然没有更新。我仍然收到一个 0 返回给我,这似乎来自我的模型,没有提供任何查询结果。
    • @dan:所以你在删除用户后打电话给updateUserCourses?因为removeUserFromClass 中的$.post 没有返回任何内容。你能确定uid 确实在发送一些东西吗?另外,您能否确认removeUserFromClass 实际上是从数据库中删除的?
    【解决方案2】:

    没有什么比需要永远纠正的愚蠢错误更糟糕的了。我不认为我的 JS 有什么问题,它是我的 PHP 模型。我需要返回数组而不是返回 0

    array("internal"=>0,"external"=>0);

    【讨论】:

      猜你喜欢
      • 2012-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-14
      • 1970-01-01
      • 2012-09-04
      • 2021-10-19
      • 2013-12-21
      相关资源
      最近更新 更多