Вызвать php-функцию из JavaScript

Есть ли способ запустить функцию 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,