从 JavaScript 调用公共 PHP 函数


Calling public PHP function from JavaScript

我写了一个公共函数来创建项目,但我需要在JavaScript文件中调用它。我该怎么做?

这是我想在data.php中使用的公共函数:

public function create($projectid,$projectnaam,$startdatum,$einddatum,$omschrijving)
{
  try
  {
    $stmt = $this->db->prepare("INSERT INTO projects (projectid, projectnaam, startdatum, einddatum, omschrijving) VALUES (".$projectid.",'".$projectnaam."', '".$startdatum."', '".$einddatum."', '".$omschrijving."')";
    $stmt->bindparam(":projectid",$projectid);
    $stmt->bindparam(":projectnaam",$projectnaam);
    $stmt->bindparam(":startdatum",$startdatum);
    $stmt->bindparam(":einddatum",$einddatum);
    $stmt->bindparam(":einddatum",$omschrijving);
    $stmt->execute();
    return true;
  }
  catch(PDOException $e)
  {
    echo $e->getMessage();  
    return false;
  }
}

这是我在 JavaScript 中用来调用函数的行,但它不起作用:

url:          'data.php?create',
直接你不能

调用任何 php 函数,但你可以做什么 - 将任何参数传递给 ajax url 中的 php 文件,在 php 文件开头获取其值,如果值匹配,则调用函数。

前任。

在阿贾克斯中:

url:          'data.php?data=create'

在 PHP 文件中开头:

$data = $_GET['data'];
if($data == "create")
   create(); // call create function

你能做的是

<script type="text/javascript">
   var foo= "<?php echo $php_var; ?>";
</script>

否则你不能直接在JS中调用PHP函数

我想你有一个核心 php 文件,你包含在每个 php 页面中,对吧?我通常使用PHP类自动加载器,所以我不必处理类的包含/要求。

spl_autoload_register(function ($class_name) {
    /* Here you can do all of your test if file/dir exists or not */
    include $class_name . '.php'; //then, you include it only when really used
});

我会像这样构建类:

class Maker {
    public function __construct(){
        if(isset($_GET['create']){
            /* fetch params */
            $this->create(/*....params....*/);
        }
    }
    public function create($projectid,$projectnaam,$startdatum,$einddatum,$omschrijving){
        /* do stuff */
    }
}

并在您的核心文件中简单地添加:

// this will listen for GET parameter 'create' and will fire create(...) function
$maker = new Maker(); 

通过这种方式,您只需对任何文件发出 ajax 请求,您的函数就会被执行。注意输出和错误

$.ajax({
    url: 'core.php?create'
});