Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Jquery调用带有参数的php函数_Php_Jquery_Ajax - Fatal编程技术网

使用Jquery调用带有参数的php函数

使用Jquery调用带有参数的php函数,php,jquery,ajax,Php,Jquery,Ajax,我有一个php文件func.php,其中定义了许多函数,比如: <? php function func1($data){ return $data+1; } ?> 我想使用ajax调用函数func1。感谢您的帮助您应该通过ajax请求调用php脚本,使用jQuery,如: Javascript: $.ajax({ url: "script.php", data: { param1: "value1", param2: "value2" }, type: "GET

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

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


我想使用ajax调用
函数func1
。感谢您的帮助

您应该通过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对象的数据属性提供参数

Php

// you can do isset check before 
$param1 = $_GET['param1'];
$param2 = $_GET['param2'];

// validate // sanitize // save to db // blah blah // do something with params

您可以从jQuery.ajax()函数描述中获得更多信息,从

您不能直接从ajax调用调用PHP函数,但您可以这样做:

PHP:


这有点复杂,但我会尽量把它缩小到最基本的部分

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

  • 脚本理解需要调用什么以及使用什么参数的方式。假设您决定使用
    GET
    请求调用函数。函数名可以在
    func
    字段中,参数可以在
    args
    字段中,作为字符串用
    分隔。换句话说,调用
    funcFoo(5,'bar')
    将通过请求
    func.php?func=func1&args=5;条形码

  • 调用者接收(并理解)返回值的方式。因为您的需求是面向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\u encode
    d

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

    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!");
    }
    
    但要注意:这只是让您开始了解整个概念的一个框架。在容错性和安全性方面都应该更加小心。但这是另一个话题。

    是的,你可以

    这是我的代码:

         $.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);
    
    }
    

    希望它能帮助你,兄弟…:你试过什么?您得到的错误是什么?乍一看,我会说您应该在使用AJAX时传递一些值,然后您的PHP脚本将获取该值,并使用say…a
    switch
    语句运行所需的函数。所有函数都接受一个参数吗?@geomagas,不,我有多个参数的函数。嗯,这会将参数发送到PHP脚本,但是如何将它们输入到该脚本中的PHP函数中呢?
         $.ajax({
            type: "POST",
            url: "ajax.php",
            data: { kode: $(this).val(), func: 'my_func' },
    
            success: function(response) {
                //any success method here
            }
        });
    
    $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);
    
    }