Есть ли способ запустить функцию php через JS-функцию?
что-то вроде этого:
<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;"> test </a>
<span id="php_code"> </span>
Я в основном хочу запустить php-функцию query("hello")
, когда я нажимаю на href, называемый "Test", который вызывает функцию php.
Ответ 1
Это, по сути, то, что AJAX для. Ваша страница загружается, и вы добавляете событие к элементу. Когда пользователь вызывает запуск события, скажем, щелкнув что-то, ваш Javascript использует объект XMLHttpRequest для отправки запроса на сервер.
После ответа сервера (предположительно на выход) другая функция/событие Javascript дает вам возможность работать с этим выходом, в том числе просто вставлять его на страницу, как и любой другой фрагмент HTML.
Вы можете сделать это "вручную" с помощью простого Javascript, или вы можете использовать jQuery. В зависимости от размера вашего проекта и конкретной ситуации может быть проще просто использовать простой Javascript.
Обычный Javascript
В этом очень базовом примере мы отправляем запрос на myAjax.php
, когда пользователь щелкает ссылку. Сервер будет генерировать некоторый контент, в данном случае "привет мир!". Мы помещаем в HTML-элемент с id output
.
javascript
// handles the click event for link 1, sends the query
function getOutput() {
getRequest(
'myAjax.php', // URL for the PHP file
drawOutput, // handle successful request
drawError // handle error
);
return false;
}
// handles drawing an error message
function drawError() {
var container = document.getElementById('output');
container.innerHTML = 'Bummer: there was an error!';
}
// handles the response, adds the html
function drawOutput(responseText) {
var container = document.getElementById('output');
container.innerHTML = responseText;
}
// helper function for cross-browser request object
function getRequest(url, success, error) {
var req = false;
try{
// most browsers
req = new XMLHttpRequest();
} catch (e){
// IE
try{
req = new ActiveXObject("Msxml2.XMLHTTP");
} catch(e) {
// try an older version
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();"> test </a>
<div id="output">waiting for action</div>
PHP
// file myAjax.php
<?php
echo 'hello world!';
?>
Попробуйте: http://jsfiddle.net/GRMule/m8CTk/
С библиотекой javascript (jQuery и др.)
Возможно, это много кода Javascript. Вы можете сократить это, ужесточив блоки или используя более точные логические операторы, конечно, но там все еще много. Если вы планируете делать много таких вещей в своем проекте, вам может быть лучше с библиотекой javascript.
Используя тот же HTML и PHP сверху, это весь ваш script (с jQuery, включенным на странице). Я немного затянул код, чтобы быть более совместимым с общим стилем jQuery, но вы поняли:
// handles the click event, sends the query
var function getOutput() {
$.ajax({
url:'myAjax.php',
complete: function (response) {
$('#output').html(response.responseText);
},
error: function () {
$('#output').html('Bummer: there was an error!');
}
});
return false;
}
Попробуйте: http://jsfiddle.net/GRMule/WQXXT/
Не спешите с jQuery: добавление какой-либо библиотеки по-прежнему добавляет сотни или тысячи строк кода в ваш проект так же точно, как если бы вы их написали. Внутри библиотеки библиотеки jQuery вы найдете аналогичный код в первом примере плюс много больше. Это может быть хорошо, может и не так. Планируйте и учитывайте текущий размер вашего проекта и будущую возможность расширения, а также целевую среду или платформу.
Если это все, что вам нужно сделать, напишите простой javascript один раз, и все будет готово.
Documentation
Ответ 2
PHP оценивается на сервере; javascript оценивается у клиента/браузера, поэтому вы не можете напрямую вызвать функцию PHP из javascript. Но вы можете выдать HTTP-запрос серверу, который активирует функцию PHP, с AJAX.
Ответ 3
Единственный способ выполнить PHP из JS - AJAX.
Вы можете отправлять данные на сервер (например, GET/ajax.php?do=someFunction)
то в ajax.php вы пишете:
function someFunction() {
echo 'Answer';
}
if ($_GET['do'] === "someFunction") {
someFunction();
}
а затем, поймайте ответ с помощью JS (я использую jQuery для создания запросов AJAX)
Возможно, вам понадобится какой-то формат ответа. См. JSON или XML, но JSON прост в использовании с JavaScript. В PHP вы можете использовать функцию json_encode ($ array); который получает массив в качестве аргумента.
Ответ 4
Недавно я опубликовал плагин jQuery, который позволяет вам делать вызовы функций PHP различными способами: https://github.com/Xaxis/jquery.php
Простой пример использования:
// Both .end() and .data() return data to variables
var strLenA = P.strlen('some string').end();
var strLenB = P.strlen('another string').end();
var totalStrLen = strLenA + strLenB;
console.log( totalStrLen ); // 25
// .data Returns data in an array
var data1 = P.crypt("Some Crypt String").data();
console.log( data1 ); // ["$1$Tk1b01rk$shTKSqDslatUSRV3WdlnI/"]
Ответ 5
PHP оценивается на сервере; javascript оценивается у клиента/браузера, поэтому вы не можете напрямую вызвать функцию PHP из javascript. Но вы можете выдать HTTP-запрос серверу, который активирует функцию PHP, с AJAX.
Используя вызов AJAX, мы можем вызвать функцию php, используя методы POST и GET,