我是一名新手PHP开发人员。
我创建了一个PHP网页项目,其中包含一个包含“添加”按钮的HTML页面。该页面的名称是awards.html。 awards.html文件包含其对应的JavaScript文件awards.js。单击“添加”按钮时,将在此js文件中执行代码。此代码将AJAX调用发送到位于名为Award.php的项目中/controller/
文件夹中的PHP类。这个PHP文件包含执行名为addFunction()的函数的代码,该函数位于项目中/model/
文件夹中的另一个Award.php文件中,该文件返回一个JSON数组并显示在awards.html页面中。
我的文件的源代码如下:
Awards.html
<div class = "divbottom">
<div id="divAddAward">
<button class="btn" onclick="onAdd();">Add</button>
</div>
</div>
awards.js
function onAdd() {
$("#divAddAward").load('controller/Award.php'); //The full path of the Award.php file in the web root
$.post(
'classes/Award.php'
).success(function(resp) {
json = $.parseJSON(resp);
});
}
Award.php(位于/controller/
文件夹中)
<?php
foreach (glob("../model/community/*.php") as $filename) {
include $filename;
}
$award = new Award(); //Instantiating Award in /model/ folder
$method = $award->addFunction();
echo json_encode($method);
Award.php(位于/model/
文件夹中)
<?php
class Award
{
public function addFunction() {
$array = array(
'status' => '1'
);
return $array;
}
}
我的代码完美无缺,无错误。现在我想在awards.html中添加另一个名为Save的按钮,单击该按钮将在JS文件中调用函数onSave()。因此,我的文件的源代码将更改为以下内容:
awards.html
<div class = "divbottom">
<div id="divAddAward">
<button class="btn" onclick="onAdd();">Add</button>
<button class="btn" onclick="onSave();">Save</button>
</div>
</div>
awards.js
function onAdd() {
$("#divAddAward").load('controller/Award.php'); //The full path of the Award.php file in the web root
$.post(
'classes/Award.php'
).success(function(resp) {
json = $.parseJSON(resp);
});
}
function onSave() {
$("#divAddAward").load('controller/Award.php'); //The full path of the Award.php file in the web root
$.post(
'classes/Award.php'
).success(function(resp) {
json = $.parseJSON(resp);
});
}
现在的问题是,由于我想从JS调用相同的Award.php文件,如何修改我的控制器Award.php文件?在我看来,应该有两个不同的函数,它们包含实例化视图Award.php类的代码并调用另一个函数;如下所示:
Award.php
<?php
foreach (glob("../model/community/*.php") as $filename) {
include $filename;
}
function add(){
$award = new Award(); //Instantiating Award in /model/ folder
$method = $award->addFunction();
echo json_encode($method);
}
function save(){
$award = new Award(); //Instantiating Award in /model/ folder
$method = $award->saveFunction();
echo json_encode($method);
}
Award.php
class Award
{
public function addFunction() {
$array = array(
'status' => '1'
);
return $array;
}
public function saveFunction() {
$array = array(
'status' => '2'
);
return $array;
}
}
但是如何从我的JS文件中调用这些特定的PHP函数?如果我上面假设的代码是正确的,那么我的JS代码应该是什么?任何人都可以告诉我这个吗?最早的回复将受到高度赞赏。提前谢谢。
答案 0 :(得分:9)
好的,我自己找到了问题的解决方案。
我发送了一个GET类型的AJAX调用,其中包含以String参数形式传递的数据,并添加了一个成功属性,以确认我的代码是否有效。我还更改了我的Award.php代码以成功捕获传递的参数。
所以我的文件的源代码是:
awards.js
function onAdd() {
$("#display").load(filePath);
$.ajax({
type: "GET",
url: 'controller/Action.php',
data: "functionName=add",
success: function(response) {
alert(response);
}
});
}
function onSave() {
$("#display").load(filePath);
$.ajax({
type: "GET",
url: 'controller/Action.php',
data: "functionName=save",
success: function(response) {
alert(response);
}
});
}
Award.php
$functionName = filter_input(INPUT_GET, 'functionName');
if ($functionName == "add") {
add();
} else if ($functionName == "save") {
save();
}
function add()
{
$award = new Award();
$method = $award->addFunction();
echo json_encode($method);
}
function save()
{
$award = new Award();
$method = $award->saveFunction();
echo json_encode($method);
}
答案 1 :(得分:4)
最好使用MVC框架,在该框架中可以使用控制器功能来添加和保存功能。您可以通过发送查询字符串参数来告诉您的php脚本调用哪个函数,从而在当前实现中实现所需的行为:
<?php
foreach (glob("../model/community/*.php") as $filename) {
include $filename;
}
function add(){
$award = new Award(); //Instantiating Award in /model/ folder
$method = $award->addFunction();
echo json_encode($method);
}
function save(){
$award = new Award(); //Instantiating Award in /model/ folder
$method = $award->saveFunction();
echo json_encode($method);
}
if($_GET["action"] == "save")
save();
else if($_GET["action"] == "add")
add();
你的js代码如下:
function onAdd() {
$("#divAddAward").load('controller/Award.php'); //The full path of the Award.php file in the web root
$.post(
'classes/Award.php?action=add'
).success(function(resp) {
json = $.parseJSON(resp);
});
}
function onSave() {
$("#divAddAward").load('controller/Award.php'); //The full path of the Award.php file in the web root
$.post(
'classes/Award.php?action=save'
).success(function(resp) {
json = $.parseJSON(resp);
});
}
答案 2 :(得分:1)
我发现了一种方法。请完整阅读我的解释继续。 在你的ajax代码中(我认为你使用jQuery),包含另一个信息&#39; perform&#39;,value = php function name。
$.post("something.php", {
something1: something1value,
something2: something2value,
perform: "php_function_name"
});
然后,在PHP文件中,在开头添加这段代码:
<?php if (isset($_POST["perform"])) $_POST["perform"](); ?>
然后,当您使用ajax调用时,您可以执行特定的功能。
用法示例:
Javascript:
$.post("example.php", {
name: "anonymous",
email: "x@gmail.com",
perform: "register"
}, function(data, status) {
alert(data);
});
PHP文件example.php:
<?php
if (isset($_POST["perform"])) $_POST["perform"]();
function register() {
echo "Hai " . $_POST["name"] . " ! Your email id is " . $_POST["email"] . ".";
}
?>
当你自动执行此操作时,函数寄存器()将被执行。