используя jquery $ .ajax для вызова функции PHP

Это может быть простой ответ, но я использую jQuery $ .ajax для вызова PHP-скрипта. То, что я хочу сделать, это в основном положить этот скрипт PHP внутри функции и вызвать функцию PHP из javascript.

<?php if(isset($_POST['something'] { //do something } ?> 

к этому

 <?php function test() { if(isset($_POST['something'] { //do something. } } ?> 

Как я могу назвать эту функцию в javascript? Прямо сейчас я просто использую $ .ajax с указанным файлом PHP.

Solutions Collecting From Web of "используя jquery $ .ajax для вызова функции PHP"

Используйте $.ajax чтобы вызвать контекст сервера (или URL-адрес или что-то еще) для вызова определенного «действия». То, что вы хотите, это что-то вроде:

 $.ajax({ url: '/my/site', data: {action: 'test'}, type: 'post', success: function(output) { alert(output); } }); 

На стороне сервера должен быть прочитан параметр POST action и соответствующее значение должно указывать на метод для вызова, например:

 if(isset($_POST['action']) && !empty($_POST['action'])) { $action = $_POST['action']; switch($action) { case 'test' : test();break; case 'blah' : blah();break; // ...etc... } } 

Я считаю, что это простое воплощение шаблона Command .

Я разработал плагин jQuery, который позволяет вам вызывать любую основную функцию PHP или даже определенные пользователем функции PHP как методы плагина: jquery.php

После включения jquery и jquery.php в начало нашего документа и размещения request_handler.php на нашем сервере мы начнем использовать плагин так, как описано ниже.

Для простоты использования используйте функцию простым способом:

  var P = $.fn.php; 

Затем инициализируйте плагин:

 P('init', { // The path to our function request handler is absolutely required 'path': 'http://www.YourDomain.com/jqueryphp/request_handler.php', // Synchronous requests are required for method chaining functionality 'async': false, // List any user defined functions in the manner prescribed here // There must be user defined functions with these same names in your PHP 'userFunctions': { languageFunctions: 'someFunc1 someFunc2' } }); 

И теперь некоторые сценарии использования:

 // Suspend callback mode so we don't work with the DOM P.callback(false); // 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/"] 

Демонстрирование цепочки функций PHP:

 var data1 = P.strtoupper("u,p,p,e,r,c,a,s,e").strstr([], "C,A,S,E").explode(",", [], 2).data(); var data2 = P.strtoupper("u,p,p,e,r,c,a,s,e").strstr([], "C,A,S,E").explode(",", [], 2).end(); console.log( data1, data2 ); 

Демонстрация отправки блока JSON псевдокода PHP:

 var data1 = P.block({ $str: "Let's use PHP's file_get_contents()!", $opts: [ { http: { method: "GET", header: "Accept-language: en\r\n" + "Cookie: foo=bar\r\n" } } ], $context: { stream_context_create: ['$opts'] }, $contents: { file_get_contents: ['http://www.github.com/', false, '$context'] }, $html: { htmlentities: ['$contents'] } }).data(); console.log( data1 ); 

Бэкэнд-конфигурация обеспечивает белый список, поэтому вы можете ограничить, какие функции можно вызвать. Есть несколько других шаблонов для работы с PHP, описанных в плагине.

Я бы придерживался обычного подхода к вызову файла напрямую, но если вы действительно хотите вызвать функцию, посмотрите JSON-RPC (JSON Remote Procedure Call).

Вы в основном отправляете строку JSON в определенном формате на сервер, например

 { "method": "echo", "params": ["Hello JSON-RPC"], "id": 1} 

который включает функцию вызова и параметры этой функции.

Конечно, сервер должен знать, как обрабатывать такие запросы.
Вот плагин jQuery для JSON-RPC и, например, Zend JSON Server в качестве реализации сервера в PHP.


Это может быть излишним для небольшого проекта или меньше функций. Самый простой способ – это ответ Карима . С другой стороны, JSON-RPC является стандартом.

Вы не можете вызвать функцию PHP с помощью Javascript, так же, как вы не можете вызывать произвольные функции PHP при загрузке страницы (просто подумайте о последствиях безопасности).

Если вам нужно поместить код в функцию по какой-либо причине, почему бы вам не поместить вызов функции в определение функции, например:

 function test() { // function code } test(); 

Или используйте PHP:

 include 'functions.php'; // functions.php has the test function test(); 

Вы можете использовать мою библиотеку, которая делает это автоматически, я улучшаю ее в течение последних 2 лет. http://phery-php-ajax.net

 Phery::instance()->set(array( 'phpfunction' => function($data){ /* Do your thing */ return PheryResponse::factory(); // do your dom manipulation, return JSON, etc } ))->process(); 

Javascript был бы прост как

 phery.remote('phpfunction'); 

Вы можете передать всю динамическую часть javascript на сервер, с построителем запросов, например, с помощью цельного интерфейса, и вы можете передать любые типы данных обратно на PHP. Например, некоторые функции, которые занимают слишком много места на стороне javascript, могут быть вызваны на сервере с помощью этого (в этом примере mcrypt, что в javascript почти невозможно выполнить):

 function mcrypt(variable, content, key){ phery.remote('mcrypt_encrypt', {'var': variable, 'content': content, 'key':key || false}); } //would use it like (you may keep the key on the server, safer, unless it's encrypted for the user) window.variable = ''; mcrypt('variable', 'This must be encoded and put inside variable', 'my key'); 

и на сервере

 Phery::instance()->set(array( 'mcrypt_encrypt' => function($data){ $r = new PheryResponse; $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB); $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND); $encrypted = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $data['key'] ? : 'my key', $data['content'], MCRYPT_MODE_ECB, $iv); return $r->set_var($data['variable'], $encrypted); // or call a callback with the data, $r->call($data['callback'], $encrypted); } ))->process(); 

Теперь variable будет иметь зашифрованные данные.

Вам нужно будет открыть и указать конечную точку (URL) в вашей системе, которая будет принимать запрос POST от вызова ajax в jQuery.

Затем, обрабатывая этот URL из PHP, вы вызываете свою функцию и возвращаете результат в соответствующем формате (скорее всего, JSON, или XML, если хотите).