16

func.php多くの関数を定義したphpファイルがあります:

<? php 
function func1($data){
return $data+1;
}
?>

私はajaxfunction func1を使用して呼び出したいです。ご協力ありがとうございました

4

4 に答える 4

40

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); }
});
于 2013-10-18T19:32:32.887 に答える
7

次のような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() 関数の説明から取得できる詳細情報

于 2013-10-18T19:29:22.527 に答える
1

もう少し複雑ですが、基本に絞り込みます。

呼び出し元とスクリプトの間に何らかのインターフェイス (基本的には規則) が必要になります。ここでの主な懸念事項は次の 2 つです。

  1. スクリプトが、何を呼び出す必要があり、どの引数を使用するかを理解する方法。GET関数を呼び出すためにリクエストを使用することにしたとしましょう。で区切られた文字列として、関数名をfuncフィールドに、引数をフィールドに入れることができます。つまり、呼び出しは を要求することによって行われます。args;funcFoo(5,'bar')func.php?func=func1&args=5;bar

  2. 呼び出し元が戻り値を受け取る (そして理解する) 方法。要件は 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!");
}

ただし、注意してください。これは、コンセプト全体を始めるための骨組みにすぎません。フォールト トレランスセキュリティの両方について、より多くの注意を払う必要があります。しかし、それは別のトピックの主題です。

于 2013-10-18T20:43:40.963 に答える