【问题标题】:Using $this when not in object context in Ajax在 Ajax 中不在对象上下文中时使用 $this
【发布时间】:2016-10-18 16:31:16
【问题描述】:

收到此错误

致命错误:未捕获的错误:当不在对象上下文中时使用 $this E:\xampp\htdocs\StudentGuideBook\Version1.0\models\AjaxChecking.php:4 堆栈跟踪:#0 {main} 抛出 E:\xampp\htdocs\StudentGuideBook\Version1.0\models\AjaxChecking.php 第 4 行

function checkAvailability() {
  jQuery.ajax({
    url: "../models/AjaxChecking.php",
    data: 'adminName=' + $("#adminName").val(),
    type: "POST",
    success: function(data) {
      $("#admin-availability-status").html(data);
    },
    error: function() {}
  });
} < /script>
AjaxChecking <?php require_once'DB_Connection.php';
 $obj_db=$this->obj_db();
 if (!empty($_POST["adminName"])) {
  $query="SELECT count(*) FROM admins WHERE adminName='" . $_POST["adminName"] ."'";
  $result=$obj_db->query($query);
  $row=mysql_fetch_row($result);
  $adminCount=$row[0];
  if ($adminCount > 0) {
    echo"<span class='status-not-available'> $adminName Admin Name is already in use.</span>";
  }
  else {
    echo"<span class='status-available'> $adminName Admin Name is Available.</span>";
  }
}
?> DB_connection <?php abstract class DB_Connection {
  protected function obj_db() {
    $host="localhost";
    $user="root";
    $password="";
    $database="studentguidebook";
    $obj_db=new mysqli();
    $obj_db->connect($host, $user, $password);
    if($obj_db->connect_errno) {
      throw new Exception(" * DB Conenct Error - $obj_db->connect_error -$obj_db->connect_errno");
    }
    $obj_db->select_db($database);
    if($obj_db->errno) {
      throw new Exception(" * DB Select Error - $obj_db->error -$obj_db->errno");
    }
    return $obj_db;
  }
}
?>
<div class="form-group mb-n">
  <label for="largeinput" class="col-sm-2 control-label label-input-lg">Admin name</label>
  <div class="col-sm-7">
    <input type="text" class="form-control1 input-lg" id="adminName" name="adminName" onBlur="checkAvailability()" placeholder="Enter Username i.e Mast Be Unique" value="<?php echo($obj_admin->adminName); ?>">
  </div>
  <div class="col-sm-3">
    <p class="help-block" id="admin-availability-status">
      <?php if (isset($errors[ 'adminName'])) { echo($errors[ 'adminName']); } ?>
    </p>
  </div>
</div>

【问题讨论】:

  • $obj_db=$this-&gt;obj_db(); 修复此问题
  • 我怎么能 :( 因为该类是抽象的,所以不知道如何解决这个问题

标签: javascript php ajax field


【解决方案1】:

在 DB_connectio.php 中用 public 替换 protected。

【讨论】:

    【解决方案2】:

    抽象类的目标是像这样扩展该类:

    class myApp extends DB_Connection {
    

    然后在你的类的方法之一(可能是构造函数)中你可以引用:

        $obj_db=$this->obj_db();
    

    因此,您应该考虑创建类并将模型和视图分开。阅读 MVC(或类似模式)以开始使用它。

    现在,如果您只想有一个快速而简单的解决方案,请编辑 DB_Connection 脚本并将其转换为普通函数:

    function obj_db() {
       // ...
    }
    

    ...所以没有类包装器。然后在你的主脚本中,像这样调用它:

    $obj_db=obj_db();
    

    如前所述,这是快速而肮脏的。随着时间的推移,随着脚本的发展,您会注意到将代码拆分为模块、将业务逻辑与表示和持久性分开是有好处的。类和模块可以帮助您管理它。所以首选第一种方式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-12
      • 1970-01-01
      • 1970-01-01
      • 2023-03-22
      • 1970-01-01
      • 2016-08-12
      • 1970-01-01
      • 2015-06-25
      相关资源
      最近更新 更多