func.php
多くの関数を定義したphpファイルがあります:
<? php
function func1($data){
return $data+1;
}
?>
私はajaxfunction func1
を使用して呼び出したいです。ご協力ありがとうございました
AJAX 呼び出しから直接 PHP 関数を呼び出すことはできませんが、次のようにすることができます。
PHP:
<? php
function func1($data){
return $data+1;
}
if (isset($_POST['callFunc1'])) {
echo func1($_POST['callFunc1']);
}
?>
JS:
$.ajax({
url: 'myFunctions.php',
type: 'post',
data: { "callFunc1": "1"},
success: function(response) { alert(response); }
});
次のようなjQueryを使用して、ajaxリクエストを介してphpスクリプトを呼び出す必要があります。
Javascript:
$.ajax({
url: "script.php",
data: { param1: "value1", param2: "value2" },
type: "GET",
context: document.body
}).done(function() {
// your code goes here
});
ajax オブジェクトの data プロパティを介してパラメーターを指定できます。
Php
// you can do isset check before
$param1 = $_GET['param1'];
$param2 = $_GET['param2'];
// validate // sanitize // save to db // blah blah // do something with params
http://api.jquery.com/jQuery.ajax/の jQuery.ajax() 関数の説明から取得できる詳細情報
もう少し複雑ですが、基本に絞り込みます。
呼び出し元とスクリプトの間に何らかのインターフェイス (基本的には規則) が必要になります。ここでの主な懸念事項は次の 2 つです。
スクリプトが、何を呼び出す必要があり、どの引数を使用するかを理解する方法。GET
関数を呼び出すためにリクエストを使用することにしたとしましょう。で区切られた文字列として、関数名をfunc
フィールドに、引数をフィールドに入れることができます。つまり、呼び出しは を要求することによって行われます。args
;
funcFoo(5,'bar')
func.php?func=func1&args=5;bar
呼び出し元が戻り値を受け取る (そして理解する) 方法。要件は js 指向であるため、JSON アプローチが非常に適切です。
関数とともに次のコードを追加します。
if(isset($_GET['func']))
{
$func=$_GET['func'];
if(function_exists($func))
{
$args=(isset($_GET['args'])?explode(';',$_GET['args']):array());
$result=call_user_func_array($func,$args);
}
else
$result=array('error'=>"Unknown Function $func!");
}
else
$result=array('error'=>"No function name provided!");
echo json_encode($result);
ただし、新しい要件を満たすために、関数も変更する必要があります。呼び出し元が提供する引数の数を知る方法がないため、必須の引数を受け入れず、提供された引数自体をチェックするように関数を設計する必要があります。json_encode
また、呼び出し元に返される前に配列を返す必要があります。
たとえば、関数の例は次のようになります。
function func1(){
$data=func_get_args();
if(count($data)) // at least one -- rest will be ignored
return $data[0]+1;
else
return array('error'=>__FUNCTION__."() expects an argument!");
}
ただし、注意してください。これは、コンセプト全体を始めるための骨組みにすぎません。フォールト トレランスとセキュリティの両方について、より多くの注意を払う必要があります。しかし、それは別のトピックの主題です。