korzystanie z jQuery $.ajax wywołanie funkcji PHP
To może być prosta odpowiedź, ale używam $jQuery.ajax do wywołania skryptu PHP. To, co chcę zrobić, to umieścić skrypt PHP wewnątrz funkcji i wywołać funkcję PHP z javascript.
<?php
if(isset($_POST['something'] {
//do something
}
?>
Do tego
<?php
function test() {
if(isset($_POST['something'] {
//do something.
}
}
?>
Jak wywołać tę funkcję w javascript? Teraz używam $.ajax z podanym plikiem PHP.
6 answers
Użyj $.ajax
, aby wywołać kontekst serwera (lub URL, lub cokolwiek innego), aby wywołać określoną "akcję". To czego chcesz to coś w stylu:
$.ajax({ url: '/my/site',
data: {action: 'test'},
type: 'post',
success: function(output) {
alert(output);
}
});
Po stronie serwera należy odczytać parametr POST action
i Odpowiednia wartość powinna wskazywać na metodę wywołania, np.:
if(isset($_POST['action']) && !empty($_POST['action'])) {
$action = $_POST['action'];
switch($action) {
case 'test' : test();break;
case 'blah' : blah();break;
// ...etc...
}
}
Uważam, że jest to proste wcielenie wzorca poleceń.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-02-15 22:30:54
Opracowałem wtyczkę jQuery, która pozwala wywoływać dowolną podstawową funkcję PHP lub nawet zdefiniowane przez użytkownika funkcje PHP jako metody wtyczki: jquery.php
Po włączeniu jquery i jquery.php w nagłówku naszego dokumentu i umieszczenie request_handler.php na naszym serwerze zaczniemy używać wtyczki w sposób opisany poniżej.
Dla łatwości użycia odwołaj się do funkcji w prosty sposób:
var P = $.fn.php;
Następnie zainicjuj wtyczkę:
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'
}
});
A teraz niektóre scenariusze użycia:
// 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/"]
Demonstrowanie łańcucha funkcji 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 );
Demonstrowanie wysyłania pseudo-kodu 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 );
Konfiguracja zaplecza zawiera białą listę, dzięki czemu można ograniczyć funkcje, które mogą być wywoływane. Istnieje również kilka innych wzorców do pracy z PHP opisanych przez wtyczkę.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-01-08 15:32:21
Trzymałbym się normalnego podejścia do bezpośredniego wywołania pliku, ale jeśli naprawdę chcesz wywołać funkcję, spójrz na JSON-RPC (JSON Remote Procedure Call).
W zasadzie wysyłasz łańcuch JSON w określonym formacie na serwer, np.
{ "method": "echo", "params": ["Hello JSON-RPC"], "id": 1}
Który zawiera funkcję do wywołania i parametry tej funkcji.
Oczywiście serwer musi wiedzieć, jak obsłużyć takie żądania.
Oto jQuery plugin dla JSON-RPC i np. Serwer Zend JSON jako implementacja serwera w PHP.
To może być przesada dla małego projektu lub mniej funkcji. Najprostszym sposobem byłaby odpowiedź Karima. Z drugiej strony, JSON-RPC jest standardem.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-20 15:04:08
Nie można wywoływać funkcji PHP za pomocą Javascript, w ten sam sposób nie można wywoływać dowolnych funkcji PHP podczas ładowania strony (wystarczy pomyśleć o implikacjach bezpieczeństwa).
Jeśli musisz zawinąć swój kod w funkcję z jakiegokolwiek powodu, dlaczego nie umieścisz wywołania funkcji pod definicją funkcji, np:
function test() {
// function code
}
test();
Lub, użyj PHP include:
include 'functions.php'; // functions.php has the test function
test();
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-02-15 22:37:56
Możesz użyć mojej biblioteki, która robi to automatycznie, ulepszałem ją przez ostatnie 2 lata 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 byłby prosty jak
phery.remote('phpfunction');
Możesz przekazać całą dynamiczną część javascript na serwer, za pomocą konstruktora zapytań, takiego jak chainable interface, i możesz przekazać dowolny typ danych z powrotem do PHP. Na przykład niektóre funkcje, które zajmowałyby zbyt dużo miejsca po stronie javascript, mogą być wywołane na serwerze za pomocą tego (w ten przykład, mcrypt, że w javascript byłoby prawie niemożliwe do wykonania):
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');
I na Serwerze
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();
Teraz variable
będą miały zaszyfrowane dane.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-12-06 13:23:58
Będziesz musiał wystawić i endpoint (URL) w systemie, który zaakceptuje żądanie POST z wywołania ajax w jQuery.
Następnie, podczas przetwarzania tego adresu url z PHP, wywołasz swoją funkcję i zwróci wynik w odpowiednim formacie(JSON najprawdopodobniej lub XML, jeśli wolisz).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-02-15 22:17:42