Я новичок-разработчик PHP.
Я создал веб-проект PHP с HTML-страницей, содержащей кнопку «Добавить». Имя страницы – award.html. Файл awards.html содержит свой файл JavaScript-партнеров, awards.js. Код выполняется в этом js-файле при нажатии кнопки «Добавить». Этот код отправляет вызов AJAX классу PHP, находящемуся в /controller/
folder в проекте с именем, Award.php. Этот PHP-файл, содержащий код для выполнения функции, называемой addFunction (), в другом файле Award.php, который находится в /model/
folder в проекте, который возвращает массив 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); }); }
.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/
folder)
<?php class Award { public function addFunction() { $array = array( 'status' => '1' ); return $array; } }
Мой код работает отлично и без ошибок. Теперь я хочу добавить еще одну кнопку в award.html, Save, которая при нажатии вызывает функцию onSave () в JS-файле. Таким образом, исходный код моих файлов изменится на следующее:
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); }); }
.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); }); }
.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); }); }
Теперь проблема заключается в том, что, поскольку я хочу называть тот же файл Award.php от JS, как мне изменить файл Control.Press моего контроллера? На мой взгляд, должны быть две разные функции, которые содержат код для создания экземпляра класса 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; } }
Но как я могу назвать эти конкретные функции PHP из своего JS-файла? Если код, который я предположил выше, правильный, то какой должен быть мой JS-код? Может кто-нибудь, пожалуйста, посоветуйте мне об этом? Ответы как можно скорее будут оценены. Заранее спасибо.
Хорошо, я сам нашел решение проблемы.
Я отправил вызов AJAX типа GET с данными, переданными в виде параметров String, и добавил свойство success, чтобы получить подтверждение, работал ли мой код или нет. Я также изменил свой код 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); }
Вам будет лучше использовать среду 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); }); }
.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); }); }
.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); }); }
Существует метод, который я обнаружил. Пожалуйста, прочитайте мое объяснение полностью, чтобы продолжить. В вашем коде ajax (я думаю, вы используете jQuery), добавьте другую информацию «выполнить», с именем функции = php.
$.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"] . "."; } ?>
Когда вы это сделаете, автоматически, функция register () будет выполнена.