【问题标题】:call php function with arguments using Jquery使用 Jquery 调用带有参数的 php 函数
【发布时间】:2013-10-27 18:23:49
【问题描述】:

我有一个 php 文件 func.php 我在其中定义了许多函数,比如说:

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

我想使用 ajax 调用function func1。谢谢你的帮助

【问题讨论】:

  • 你试过什么?你得到什么错误?乍一看,我会说您应该在使用 AJAX 时传递一些值,然后您的 PHP 脚本将选择该值并使用 say....a switch 语句运行所需的函数。
  • 所有函数都接受一个参数吗?
  • @geomagas ,不,我有多个参数的函数

标签: php jquery ajax


【解决方案1】:

你应该通过 ajax 请求调用你的 php 脚本,使用像这样的 jQuery:

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() 函数描述中获得更多信息

【讨论】:

  • 嗯,这会将参数发送到 PHP 脚本,但是如何将它们输入到该脚本中的 PHP 函数中呢?
【解决方案2】:

您不能直接从 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); }
});

【讨论】:

    【解决方案3】:

    这有点复杂,但我会尽量把它缩小到基础。

    调用者和脚本之间需要某种接口(基本上是约定)。这里有两个主要问题:

    1. 脚本理解需要调用什么以及使用什么参数的方式。假设您决定使用GET 请求来调用函数。函数名称可以在func 字段中,参数在args 字段中,作为由; 分隔的字符串。换句话说,调用funcFoo(5,'bar') 将通过请求func.php?func=func1&amp;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_encoded。

    例如,您的示例函数应该如下所示:

    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!");
    }
    

    请注意:这只是让您开始了解整个概念的框架。 容错安全都应该更加小心。但那是另一个话题了。

    【讨论】:

      【解决方案4】:

      是的,你可以!

      这里是我的代码:

           $.ajax({
              type: "POST",
              url: "ajax.php",
              data: { kode: $(this).val(), func: 'my_func' },
      
              success: function(response) {
                  //any success method here
              }
          });
      

      这里是 php 中的代码来接收要调用的函数。

      $post = (object) $_POST;
      if(!$post)
          return false;
      
      $func = $post->func;
      return $func($post);
      
      function my_func($post) {    
      
          $json['any_data'] = false;
      
          if($post->kode == 'ND'){               
              $json['any_data'] = 'ND-'.date('Y');
          }
      
          echo json_encode($json);
      
      }
      

      希望对你有所帮助... :D

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-21
        • 1970-01-01
        相关资源
        最近更新 更多