Есть ли способ запустить функцию php через функцию JavaScript?
Если использовать что-то вроде этого:
<script type="text/javascript">
function test(){
document.getElementById("php_code").innerHTML="<?php
query("hello");
?>";
}
</script>
<a href="#" style="display:block; color:#000033; font-family:Tahoma; font-size:12px;"
onclick="test(); return false;">Тест</a>
<span id="php_code">
</span>
Я пытаюсь запустить функцию php query("hello"), когда нажимаю на ссылку «Тест», которая вызывает функцию php.
Ответ 1
Ваша страница загружается, и вы добавляете событие к элементу. Когда пользователь вызывает событие, например, кликая по ссылке, Javascript использует объект XMLHttpRequest для отправки запроса на сервер.
После того как сервер отвечает (предположительно, с выводом), ваша функция/событие Javascript дает вам возможность работы с этим выводом, в том числе просто вставляя его на страницу, как любой другой фрагмент HTML.
Вы можете сделать это «вручную» с помощью простого Javascript или использовать jQuery. В зависимости от размера вашего проекта и конкретной ситуации, может быть проще использовать простой Javascript.
Обычный Javascript
В этом очень простом примере мы отправляем запрос, когда пользователь кликает по ссылке. Сервер будет генерировать некоторый контент, в данном случае «hello world!». И будет генерироваться HTML-элемент с идентификатором output.
JavaScript
// обработчик события по ссылке, который отправляет запрос
function getOutput() {
getRequest(
'myAjax.php', // URL на PHP файл
drawOutput, // Обработчик успешного завершения операции
drawError // Обработчик ошибки
);
return false;
}
// Обработчик отображения ошибки
function drawError() {
var container = document.getElementById('output');
container.innerHTML = 'Ошибка!';
}
// Обработчик успешного завершения операции
function drawOutput(responseText) {
var container = document.getElementById('output');
container.innerHTML = responseText;
}
function getRequest(url, success, error) {
var req = false;
try{
req = new XMLHttpRequest();
} catch (e){
try{
req = new ActiveXObject("Msxml2.XMLHTTP");
} catch(e) {
try{
req = new ActiveXObject("Microsoft.XMLHTTP");
} catch(e) {
return false;
}
}
}
if (!req) return false;
if (typeof success != 'function') success = function () {};
if (typeof error != 'function') error = function () {};
req.onreadystatechange = function(){
if(req.readyState == 4) {
return req.status === 200 ?
success(req.responseText) : error(req.status);
}
}
req.open("GET", url, true);
req.send(null);
return req;
}
HTML
<a href="#" onclick="return getOutput();">Тест</a>
<div id="output">Ожидание ответа</div>
PHP
<?php
echo 'hello world!';
?>
С библиотекой jQuery и т. п.
Конечно, этот код можно сократить, уплотнив блоки или используя более лаконичные логические операторы.
Используя HTML и PHP, вот скрипт с jQuery:
// Обработчик события
function getOutput() {
$.ajax({
url:'myAjax.php',
complete: function (response) {
$('#output').html(response.responseText);
},
error: function () {
$('#output').html('Ошибка!');
}
});
return false;
}
Ответ 2
Единственный способ запустить PHP из JS - это AJAX. Вы можете отправить данные на сервер (например, используя GET /ajax.php?do=someFunction), а затем в ajax.php:
function someFunction() {
echo 'Ответ';
}
if ($_GET['do'] === "someFunction") {
someFunction();
}
После этого перехватите ответ с помощью JS (используя jQuery для выполнения запросов AJAX).
Возможно, вам понадобится какой-то формат ответа. Можно использовать JSON или XML, но JSON легко использовать с JavaScript. В PHP вы можете использовать функцию json_encode($array), которая получает массив в качестве аргумента.
Web