根据数据库

时间:2015-07-16 07:40:15

标签: php ajax codeigniter

我在一个名为table_data.php的视图中有一个名为save的按钮的bootbox对话框,我想确定是否将根据从数据库获得的结果完成Ajax发布到数据库的操作。

我希望仅在home_model.php中的数据库查询未返回任何行时才保存数据。但是,当我这样做时,它不起作用。这是一个cms,我正在使用codeigniter框架。

我的页面是空白的。什么都没有出现。请帮我。我是网络新手,对JavaScript和php的经验很少,刚开始使用ajax。非常感谢您的帮助。

table_data.php(查看)

 bootbox.dialog({
      message: '<div class="row">  ' +
               '<div class="col-md-12"> ' +
               '<form class="form-horizontal"> ' +
               '<div class="form-group"> ' +
               '<label class="col-md-4 control-label" for="awesomeness">Table ID: </label> ' +
               '<div class="col-md-4">' +
               '<input id="idtable" type="text" value="'+table_column_15+'"/>' +
               '</div><br>' +
               '</div>'+
               '</form> </div>  </div>',
      title: "Form",
      buttons: {
        success: {
          label: "Save",
          className: "btn-success",
          callback: function() {
                                console.log('save');
                                console.log($('#re_confirm')[0].checked);
                                var valueid = document.getElementById('idtable').value
                                if(valueid == 0)
                                  myFunction();
                                var valueid2 = document.getElementById('idtable').value
                                if(valueid2==0)
                                  return;

                                 $.ajax({
                                    url: "<?php echo base_url(); ?>index.php/home/check_occupied",
                                    type: "post", // To protect sensitive data
                                    data: {
                                            "table_id" : valueid2
                                            "session_id" : table_column_15
                                        //and any other variables you want to pass via POST
                                          },
                                    success:function(response){
                                    // Handle the response object
                                       console.log(response);
                                       var check = $(response);
                                     }
                                  });

                                   if(check==0)
                                    return;

                                   $.ajax({
                                   url : "<?php echo base_url(); ?>index.php/home/update_booking",
                                   type: "post",
                                   data: {
                                       "table_id" : $('#idtable').val(),
                                   },
                                   success: function(response){
                                       ...
                                   }
                               });
          }
        },
        ...
        ,
        ...
      }
    });

home_model.php(模特)

  public function check_occupied($tableid,$sessionid)
        {

            $sql = "SELECT * FROM booking WHERE table_id=$tableid and session=$sessionid;
            $query = $this->db->query($sql);

            if ($query->num_rows() > 0)
                $imp = 1;
            else
                $imp = 0;

            return $imp;
        }

home.php(控制器)

public function check_occupied()
    {

        $tableid = $_POST['table_id'];
        $sessionid = $_POST['session_id'];
        $imp = $this->home_model->check_occupied($tableid,$sessionid);

        $this->load->view('table_data', $imp);
    }

1 个答案:

答案 0 :(得分:0)

我发现了一些语法小错误,但最大的问题是您尝试在check中使用var if(check==0)

您的条件评估if(check==0)超出了对check_occupied的ajax调用的成功函数。因此,if(check==0)将在成功函数运行之前执行,并为check设置值。如果您在console.log(check);语句之前if,则会发现值未定义&#39;。在输出`console.log(response);&#39;之前,也会记录此控制台结果。这将确认执行的顺序。

换句话说,您需要决定是否在check_occupied ajax调用的success函数内运行下一个ajax调用。

这是我的版本。它没有经过测试,但我认为这个概念是合理的。这仅显示&#34; Save&#34;的callback:。按钮。

callback: function () {
  console.log('save');
  console.log($('#re_confirm')[0].checked);
  var valueid = document.getElementById('idtable').value;
  if (valueid === 0) {
    myFunction();
  }
  var valueid2 = document.getElementById('idtable').value;
  if (valueid2 === 0) {
    return;
  }
  $.ajax({
    url: "<?php echo base_url(); ?>index.php/home/check_occupied",
    type: "post", // To protect sensitive data
    data: {
      "table_id": valueid2,
      //??? where is table_column_15 declared and initialized? Some global var?
      "session_id": table_column_15
        //and any other variables you want to pass via POST
    },
    success: function (response) {
      // Handle the response object
      console.log('response='+response);
      //if I read check_occupied() right, response should only be 1 or 0 
      //there is no need to assign it to another var, eg. var check = response
      //there is no apparent need to turn it into a JQuery object with $(response) either
      if (response > 0) {
        $.ajax({
          url: "<?php echo base_url(); ?>index.php/home/update_booking",
          type: "post",
          data: {
            "table_id": $('#idtable').val()
          },
          success: function (response) {
          }
        });
      }
    }//end of success function callback for check_occupied() ajax
    console.log('ajax to check_occupied is done.');
  });
}