Я пытаюсь вызвать функцию php, когда нажата кнопка HTML. Я сделал несколько поисков и обнаружил, что это невозможно сделать прямо, и я должен использовать ajax. так что это моя попытка до сих пор, которая не работает. Это мой test.php, и функция также находится на этой странице.
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.js"></script> <script type="text/javascript"> $(document).ready(function() { $('.NextPage').on('click', function() { $.ajax({ url: 'test.php', data: {x: 1}, type: 'POST', dataType: 'JSON', success: function(response) { alert(response); } }); }); }); </script> </head> <body> <button type="button" class="NextPage">go to nextpage</button> <?php if (isset($_POST['x'])) { if ($_POST['x'] == 1) { $data = function1(); echo json_encode($data); exit; } } function function1() { return 'Hi user! im function #1'; } function function2() { return 'Hi user! im function #2'; } ?>
получить значение x из ajax-вызова.
$ x = $ _POST ['x'];
затем используйте его.
РЕДАКТИРОВАТЬ
Сначала вы должны проверить погоду, в которой установлена ваша переменная.
if(isset($_POST[x])) { $x = $_POST['x']; }
попробуй это
Я практически использовал ваш код и получил его работу. Ваш PHP очень хорош, как и для вашего вызова AJAX, он должен иметь success
или done
чтобы помочь возвращенным данным.
Код для справки находится здесь
HTML
<!DOCTYPE html> <html> <head> <title></title> <meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="mobile-web-app-capable" content="yes"> <link rel="shortcut icon" sizes="196x196" href=""> <link rel="stylesheet" type="text/css" href="" /> </head> <body> <div id="abc"></div> <button type="submit" class="NextPage">go to nextpage</button> <script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <script type="text/javascript" src="app.js"></script> </body> </html>
JavaScript
$(document).ready(function() { $('.NextPage').click(function() { $.ajax({ type:'post', url:'service.php', data:{x:1} }).done(function(data) { $("#abc").text(data); }); }); });
PHP
<?php $x = $_POST['x']; if ($x == 1) { function1(); } function function1() { echo "This is function 1"; } function function2() { echo "This is function 2"; }
Во-первых, вам нужно установить свою кнопку для type="button"
, затем выполнить запрос AJAX, тогда недостающая часть в вашем коде является бэкэнд-частью, которая обрабатывает запрос. Затем бэкэнд отвечает на этот вызов. После этого вы можете просто делать то, что вам нравится в этом ответе. Рассмотрим этот пример:
<?php // this part handles the AJAX request if(isset($_POST['x'])) { if($_POST['x'] == 1) { $data = function1(); // a call has made, then give a response echo json_encode($data); exit; } } function function1() { // do some processing return 'Hi user! im function #1'; } function function2() { return 'Hi user! im function #2'; } ?> <!-- make its type "button" --> <button type="button" class="NextPage">go to nextpage</button> <div id="notification"></div> <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.js"></script> <script type="text/javascript"> $(document).ready(function(){ $('.NextPage').click(function(){ $.ajax({ url: 'test.php', data: {x: 1}, type: 'POST', dataType: 'JSON', success: function(response) { $('#notification').html('Your ajax call has been successful<br/> and this is a notification').css({background: 'yellow'}); } }); }); }); </script>
Что заставляет вас думать, что невозможно напрямую вызвать функцию php. Это именно то, что сделано в Framework MVC CodeIgniter. Вы можете вызвать php-функцию с аргументами внутри php-класса непосредственно в CodeIgniter, и это на самом деле то, что делается всегда.