私は多くのトピックを検索しましたが、適切な答えは見つかりませんでした。私の目標は、オプションで任意の引数を指定してPHP関数を実行するPHPページでAJAXポストリクエストを実行するJavascript関数を呼び出すHYMLハイパーリンクを持つことです。多くのトピックでは、特定の機能(特定の名前)についてこの問題を解決しました。私はAJAXの投稿要求を、同じ関数を使ってすべての種類のPHP関数を呼び出すように一般化したいと考えています。jQueryを使わないで一般的なajax javascriptを使用してphp関数を呼び出します。
これは私が持っているものであるが、それは、PHPスクリプトでうまくいかない...
HTML:
<a onclick="call_php('php_function_name', ['arg_1', 'arg_2']);">call</a>
<p id="demo"></p>
Javascriptを:JavascriptのI」で
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
}));
}
この場合正しく使用されている場合は、JSON.stringify()
とsetRequestHeader()
と尋ねる。それのファイル内の関数を呼び出す必要があり
PHP、:それはすでにJavascriptをで定義されていますので、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...
}
私はheader('Content-Type: application/json')
に質問しています。しかし、主な質問は、PHP関数を呼び出すためのPHPコードを書く方法です。ところで、echo $post
を印刷すると、json_decode()は、パラメータ1が文字列、配列として指定されていることを期待しています...
あなたは[call_user_funcやcall_user_func_array]のようなPHPの機能を探しています(http://php.net/manual/en /function.call-user-func.php)、例えば'call_user_func_array( 'php_function_name'、array(&$ a))'? – gus27
[JavaScriptの名前でPHP関数を呼び出す]の複製があります(http://stackoverflow.com/questions/23039439/call-php-function-by-name-from-javascript) – gus27
@ gus27は、 JSが実際に呼び出す関数が実際に存在するかどうかを調べるには、[method_exists()](http://php.net/manual/en/function.method-exists.php)を使用してください。 – Nukeface