Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
创建对PHP函数的jQuery AJAX请求_Php_Javascript_Ajax_Jquery - Fatal编程技术网

创建对PHP函数的jQuery AJAX请求

创建对PHP函数的jQuery AJAX请求,php,javascript,ajax,jquery,Php,Javascript,Ajax,Jquery,到目前为止,在创建AJAX请求时,我一直将其发布到一个单独的PHP文件中。是否可以创建一个调用PHP函数的jQuery AJAX请求,而不是发布到单独的页面 如果您能给我发送任何示例或文档,那就太好了。AJAX请求调用URL(发出HTTP请求),而不是文件,在大多数情况下,服务器会将URL翻译为指向文件(或您的php脚本),但从HTTP请求到接收到的响应的所有操作都取决于您(在服务器上) 有许多PHP框架将URL映射到特定的PHP函数,AJAX只是一种异步方式来访问URL并接收响应 所述URL可

到目前为止,在创建AJAX请求时,我一直将其发布到一个单独的PHP文件中。是否可以创建一个调用PHP函数的jQuery AJAX请求,而不是发布到单独的页面

如果您能给我发送任何示例或文档,那就太好了。

AJAX请求调用URL(发出HTTP请求),而不是文件,在大多数情况下,服务器会将URL翻译为指向文件(或您的php脚本),但从HTTP请求到接收到的响应的所有操作都取决于您(在服务器上)

有许多PHP框架将URL映射到特定的PHP函数,AJAX只是一种异步方式来访问URL并接收响应


所述URL可以触发服务器调用特定函数并返回响应。但是,URL和服务器端代码的结构是由您自己决定的。

如果您问是否可以使用AJAX调用任意PHP函数,出于明显的安全原因(除了技术原因),答案是否定的*。如果不想创建多个单独的文件,可以根据给定的参数(例如,执行单个函数)制作一个PHP脚本,该脚本可以执行不同的操作


*虽然您可以创建一个脚本来执行来自客户端的任意PHP命令,但这是非常非常不明智的。

我相信这项技术在这里的工作原理存在根本性的误解

AJAX(Javascript)、Flash或任何客户端技术都不能直接调用PHP函数(或服务器上运行的其他语言)。 反过来也是如此(例如:PHP不能调用JS函数)

客户机和服务器代码驻留在不同的机器上,它们通过HTTP协议(或您拥有的其他协议)进行通信。HTTP的工作原理大致如下:

var base64_decode = create_remote_call('base64_decode');

function create_remote_call(name) {
  return function(x) { 
    jQuery.getJSON('url/server.php',
                   {func:name,arg:x},
                   function(d){return d;}); 
  } 
}

客户端(例如:浏览器)发送请求->服务器处理请求并发送响应->客户端获取并显示和/或处理响应

您必须将这些请求和响应视为消息。消息不能直接调用服务器端语言1上的函数,但可以提供足够的信息,以便它们这样做并从服务器返回有意义的消息

因此,您可以有一个处理程序来处理和分派这些请求,如下所示:

// ajax_handler.php
switch ($_POST['action']) {
    case 'post_comment':
        post_comment($_POST['content']);
        break;
    case '....':
        some_function();
        break;
    default:
        output_error('invalid request');
        break;
}
然后让您的客户机使用正确的参数将请求发送到这个集中处理程序。然后,处理程序决定在服务器端调用什么函数,最后将响应发送回客户端


1从技术上讲是有的,但这些可能会变得混乱。

简短的回答是“不”,但真正的答案是你可以假装它。NullUserException的答案很好。您将创建一个服务器,该服务器将采用函数名及其参数。然后服务器执行该函数,并返回值

这是不久前通过一个称为XML-RPC的协议完成的。还有一个名为JSON-RPC的工作,它使用了一些JS技术

JS最酷的一点是,你可以做如下事情:

var base64_decode = create_remote_call('base64_decode');

function create_remote_call(name) {
  return function(x) { 
    jQuery.getJSON('url/server.php',
                   {func:name,arg:x},
                   function(d){return d;}); 
  } 
}
调用base64_decode('sarefdsfsaes')将发出ajax请求并返回值

该代码可能无法工作,因为它尚未经过测试,但它是一个函数,生成一个调用服务器的函数,然后返回值。处理多个参数需要更多的工作


所有这些都表明。。。根据我的经验,将所有网络通信显式化通常是好的,而不是将其伪装成常规函数。

您可以使用桥接器(如我的phery库)实现相同的结果,您可以直接从Javascript调用PHP函数并处理值。AJAX绑定到DOM元素,因此您可以操纵调用DOM,或者从PHP端使用jQuery。例如:

Phery::instance()->set(数组(
'phpfunction'=>function(){
返回PheryResponse::factory()->jquery('body')->addClass('whoops');
}
))->过程();
在javascript端(或HTML)

phery.remote('phpffunction');
与John Kawakami使用phery得出的答案相同的是:

函数base64($data){
return!空($data['encode'])?base64_encode($data['content']):base64_decode($data['content']);
}
Phery::instance()->set(数组(
'base64'=>'base64'
))->过程();
函数base64(内容、解码、输出){
远程('base64',{'content':内容,'encode':解码?1:0},{'type':'text'}).done(输出);
}
base64('asdf',false,函数(数据){
console.log(data);//或分配给某个变量
});

由于AJAX是异步的,您不能只从AJAX调用返回一个值,因此需要回调,但这就足够了。

不,除非您调用PHP脚本。据我所知,您无法在同一页面上与PHP函数通信Ajax(JS)无法调用单个PHP函数。它不是那样工作的。你说的任意是什么意思?@jondavidjohn任何东西,不受限制的我不认为他想让他的用户在他的服务器上运行不受限制的php,他只是想把他的php组织成函数,而不是运行单个文件/脚本。我不知道,我把这个问题理解为“使用AJAX可以执行PHP函数,而不是运行PHP脚本”。不过,我可能错了。在我看来,安全性不是问题所在,这纯粹是技术问题。例如:您可以让客户端直接连接到服务器(例如:SSH)并执行任意命令,不管是否使用PHP。”我相信人们对这项技术的工作原理有一个根本性的误解。“我完全同意。”客户机和服务器代码驻留在不同的机器上"... 我认为这是困扰很多人的部分。HTML、Javascript和PHP都并排驻留在服务器上,但Javascript在客户端执行。我认为人们不理解获取Javascript