16

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

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

我想调用function func1using ajax。感谢您的帮助

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

它有点复杂,但我会尝试将其缩小到基础。

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

  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返回给调用者之前为 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!");
}

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

于 2013-10-18T20:43:40.963 回答
1

是的你可以 !

这是我的代码:

     $.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

于 2018-04-16T01:37:14.600 回答