usando jquery $.ajax para llamar a una función PHP
Esta puede ser una respuesta simple, pero estoy usando $.ajax de jQuery para llamar a un script PHP. Lo que quiero hacer es básicamente poner ese script PHP dentro de una función y llamar a la función PHP desde javascript.
<?php
if(isset($_POST['something'] {
//do something
}
?>
a esto
<?php
function test() {
if(isset($_POST['something'] {
//do something.
}
}
?>
¿Cómo llamaría a esa función en javascript? En este momento solo estoy usando $.ajax con el archivo PHP en la lista.
Úselo $.ajax
para llamar a un contexto de servidor (o URL, o lo que sea) para invocar una 'acción' particular. Lo que quieres es algo como:
$.ajax({ url: '/my/site',
data: {action: 'test'},
type: 'post',
success: function(output) {
alert(output);
}
});
En el lado del servidor, action
se debe leer el parámetro POST y el valor correspondiente debe apuntar al método a invocar, por ejemplo:
if(isset($_POST['action']) && !empty($_POST['action'])) {
$action = $_POST['action'];
switch($action) {
case 'test' : test();break;
case 'blah' : blah();break;
// ...etc...
}
}
Creo que es una encarnación simple del patrón Command .
Desarrollé un complemento jQuery que te permite llamar a cualquier función principal de PHP o incluso funciones PHP definidas por el usuario como métodos del complemento: jquery.php
Después de incluir jquery y jquery.php en el encabezado de nuestro documento y colocar request_handler.php en nuestro servidor, comenzaríamos a usar el complemento de la manera que se describe a continuación.
Para facilitar su uso, consulte la función de forma sencilla:
var P = $.fn.php;
Luego inicialice el complemento:
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'
}
});
Y ahora algunos escenarios de uso:
// 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/"]
Demostrando el encadenamiento de funciones 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 );
Demostrando el envío de un bloque JSON de pseudocódigo 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 );
La configuración del backend proporciona una lista blanca para que pueda restringir qué funciones se pueden llamar. También hay algunos otros patrones para trabajar con PHP descritos por el complemento.
Me quedaría con el enfoque normal para llamar al archivo directamente, pero si realmente desea llamar a una función, eche un vistazo a JSON-RPC (llamada a procedimiento remoto JSON).
Básicamente envías una cadena JSON en un formato específico al servidor, por ejemplo
{ "method": "echo", "params": ["Hello JSON-RPC"], "id": 1}
que incluye la función a llamar y los parámetros de esa función.
Por supuesto, el servidor debe saber cómo manejar dichas solicitudes.
Aquí está el complemento jQuery para JSON-RPC y, por ejemplo, el servidor Zend JSON como implementación de servidor en PHP.
Esto podría ser excesivo para un proyecto pequeño o con menos funciones. La forma más fácil sería la respuesta de Karim . Por otro lado, JSON-RPC es un estándar.