【发布时间】:2019-08-21 16:20:23
【问题描述】:
我搜索了很多主题,但找不到答案。我的目标是在 PHP 页面上有一个调用 Javascript AJAX 发布请求的 HTML 超链接来运行 PHP 函数(可选地带有任意数量的参数)。许多主题为定义的函数(具有特定名称)解决了这个问题。我想概括一下 AJAX 发布请求函数,以便将 PHP 函数名称传递给 AJAX 请求来调用它,这样我就可以在 Javascript 中定义要调用的 PHP 函数。
这就是我所拥有的,但是在 PHP 脚本中出错了...
HTML:
<a onclick="call_php('php_function_name', ['arg_1', 'arg_2']);">call</a>
<p id="demo"></p>
Javascript:
function call_php(fname, args) {
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function () {
if (this.readyState == 4 && this.status == 200) {
document.getElementById('demo').innerHTML = this.responseText;
}
};
xhttp.open('POST', 'includes/functions.php', true);
xhttp.setRequestHeader('Content-type', 'application/json');
xhttp.send(JSON.stringify({
'fname': fname,
'args': args
}));
}
在 Javascript 中,我质疑 JSON.stringify() 和 setRequestHeader() 在这种情况下是否正确使用。
PHP,它应该在它的文件中调用一个函数:
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
//header('Content-Type: application/json');
$post = json_decode($_POST/*, true*/);
// DO SOMETHING TO CALL: fname(...args);
}
function php_function_name(arg_1, arg_2) {
// A FUNCTION...
}
在 PHP 中,我质疑 header('Content-Type: application/json'),因为它已经在 Javascript 中定义。但主要问题是:如何编写 PHP 代码来调用 PHP 函数?顺便说一句:当我打印 echo $post 时,它会发出警告:json_decode() 期望参数 1 是字符串,给定数组...
【问题讨论】:
-
您是否正在寻找像 call_user_func or call_user_func_array 这样的 PHP 函数,例如
call_user_func_array('php_function_name', array(&$a))? -
@gus27 所说的,虽然您可能想先检查 JS 尝试调用的函数是否确实存在,但请使用 method_exists()。
-
谢谢,我会看看
call_user_func函数,但是如何将帖子数据变量name和args放入该函数中? -
只是为了确保清楚:允许调用任何 PHP 函数是一个非常糟糕的主意。考虑一下如果我在您的网站上打开一个 JS 控制台并输入类似
call_php('exec', ['rm -rf /']);的内容会发生什么。希望您能看到我以这种方式真正弄乱您的系统的可能性是无穷无尽的。也不要尝试将其列入黑名单,将允许的功能列入白名单,对任何其他输入仅以“错误”响应。
标签: javascript php json ajax