У меня есть веб-сайт php, показывающий / скрывающий страницы через навигационные ссылки.
Мне интересно, как вызвать свои php-функции при нажатии соответствующей ссылки на страницу. Можно ли использовать ajax (jquery?) Для вызова одной из всех функций в моем файле functions.php?
Как я понимаю, ajax будет запускать весь код в php-файле с его вызовом?
$(document).on("click", ".dbLink", function() { var sText = $(this).attr("data-variable"); $.ajax({ url: '../ini/functions.php?q='+sText, type: 'get', success: function(data){ alert(data); } }); });
function.php
function a(){ echo "result"; } if (isset($_POST['action'])) { switch($_POST['action']) { case "a": a(); break; case "b": b(); break; default: break; } }
Поместите строку в параметры AJAX и попросите PHP-код выполнить различные функции в зависимости от строки, например
switch($_GET['op']) { case "delete": do_delete(); break; case "update": do_update(); break; ... default: // Report unrecognized operation }
В коде jQuery функция обработчика должна вызывать event.preventDefault
или возвращать false
чтобы предотвратить нормальное действие элемента, на который вы нажимаете (я предполагаю, что это ссылка). Кроме того, вам нужно сопоставить способ отправки запроса AJAX с тем, как вы извлекаете параметр в PHP, – если вы используете $_POST
, вам нужно использовать type: 'post'
– и имена параметров должны совпадать (вы использовали q
в Javascript, но action
в PHP).
$(document).on("click", ".dbLink", function(e) { e.preventDefault(); var sText = $(this).attr("data-variable"); $.ajax({ url: '../ini/functions.php', data: { action: sText } type: 'post', success: function(data){ alert(data); } }); });
Вы можете выполнить запрос ajax на сервер с вашими данными в параметрах запроса.
jQuery.ajax({ type: "POST", url: 'your_functions_address.php', dataType: 'json', data: {functionname: 'add', arguments: [1, 2]}, success: function (obj, textstatus) { if( !('error' in obj) ) { yourVariable = obj.result; } else { console.log(obj.error); } } });
и your_functions_address.php:
<?php $aResult = array(); if( !isset($_POST['functionname']) ) { $aResult['error'] = 'No function name!'; } if( !isset($_POST['arguments']) ) { $aResult['error'] = 'No function arguments!'; } if( !isset($aResult['error']) ) { switch($_POST['functionname']) { case 'add': if( !is_array($_POST['arguments']) || (count($_POST['arguments']) < 2) ) { $aResult['error'] = 'Error in arguments!'; } else { $aResult['result'] = add(floatval($_POST['arguments'][0]), floatval($_POST['arguments'][1])); } break; default: $aResult['error'] = 'Not found function '.$_POST['functionname'].'!'; break; } } json_encode($aResult); ?>
Вы не вызываете функции из AJAX. С AJAX вы извлекаете ресурсы.
PHP – это препроцессор ресурсов (как и любой серверный язык), поэтому он выполняет код, чтобы принести вам так называемый ресурс (html-страницы, css, изображения, … являются ресурсами).
Таким образом, AJAX не выпускает функции, поскольку AJAX не связан с PHP, а HTTP-запросами.
В этом смысле сторона AJAX может понять, что она должна выпустить ресурс (и он НЕ ЗНАЕТ, что ресурс вызовет кусок серверной логики).
Итак, что вы можете ожидать, это отправить аргументы (например, через GET или POST) и ожидать результата. В другой (то есть в PHP) стороне вы должны рассмотреть эти аргументы и обработать их.
Возможно, вы отправляете такие параметры, как functionName = func1 & params = [1,2,% 22a% 22] и обрабатываете их как:
$func = $_GET['functionName']; $params = json_decode($_GET['params']); if (function_exists($func)) { $result = call_user_func_array($func, $params); echo json_encode($result); } else { echo "unexistent function"; }
выполнит эту работу, но, опять же, AJAX не знает об этом и никогда не будет, поскольку AJAX не связан с PHP.