如何使用ajax调用许多php函数之一?

时间:2014-04-09 20:51:14

标签: php ajax

我有php网站通过导航链接显示/隐藏页面 我想知道如何在点击相应的页面链接时调用我的php函数。 是否可以使用ajax(jquery?)来调用我的function.php文件中的所有函数之一?
据我所知,ajax会在php文件中运行整个代码吗?

$(document).on("click", ".dbLink", function() {
  var sText = $(this).attr("data-variable");
  $.ajax({
      url: '../ini/functions.php?q='+sText,
      type: 'get',
      success: function(data){
          alert(data);
      }
  });
});

function.php

function a(){
    echo "result";
}

if (isset($_POST['action'])) {
    switch($_POST['action']) {
       case "a":
          a();
          break;
       case "b":
          b();
          break;
       default:
          break;
   }
}

3 个答案:

答案 0 :(得分:3)

在AJAX参数中放入一个字符串,让PHP代码根据字符串运行不同的函数,例如

switch($_GET['op']) {
    case "delete":
        do_delete();
        break;
    case "update":
        do_update();
        break;
    ...
    default:
        // Report unrecognized operation
}

在你的jQuery代码中,处理函数应该调用event.preventDefault或返回false以阻止你点击的元素的正常动作(我猜测它是一个链接) 。此外,您需要将发送AJAX请求的方式与在PHP中检索参数的方式相匹配 - 如果使用$_POST,则必须使用type: 'post' - 并且参数名称必须匹配(您在Javascript中使用了q,但在PHP中使用了action

$(document).on("click", ".dbLink", function(e) {
    e.preventDefault();
    var sText = $(this).attr("data-variable");
    $.ajax({
        url: '../ini/functions.php',
        data: { action: sText }
        type: 'post',
        success: function(data){
            alert(data);
        }
    });
});

答案 1 :(得分:1)

您可以使用请求参数中的数据向服务器发送ajax请求。

jQuery.ajax({
type: "POST",
url: 'your_functions_address.php',
dataType: 'json',
data: {functionname: 'add', arguments: [1, 2]},

success: function (obj, textstatus) {
              if( !('error' in obj) ) {
                  yourVariable = obj.result;
              }
              else {
                  console.log(obj.error);
              }
        }
});

和your_functions_address.php是这样的:

<?php
$aResult = array();

if( !isset($_POST['functionname']) ) { $aResult['error'] = 'No function name!'; }

if( !isset($_POST['arguments']) ) { $aResult['error'] = 'No function arguments!'; }

if( !isset($aResult['error']) ) {

    switch($_POST['functionname']) {
        case 'add':
           if( !is_array($_POST['arguments']) || (count($_POST['arguments']) < 2) ) {
               $aResult['error'] = 'Error in arguments!';
           }
           else {
               $aResult['result'] = add(floatval($_POST['arguments'][0]), floatval($_POST['arguments'][1]));
           }
           break;

        default:
           $aResult['error'] = 'Not found function '.$_POST['functionname'].'!';
           break;
    }

}

json_encode($aResult);

?>

答案 2 :(得分:0)

您不从AJAX调用函数。使用AJAX,您可以检索资源。

PHP是一个资源预处理器(就像每个服务器端语言一样),因此它执行代码为您带来所谓的资源(html页面,css,图像,......是资源)。

因此,AJAX不会发布函数,因为AJAX与PHP无关,而与HTTP请求无关。

从这个意义上说,AJAX方面可以理解它必须发布一个资源(并且它不知道该资源会触发一大堆服务器端逻辑)。

所以,你可以期待的是发送参数(例如通过GET或POST)并期待结果。在另一个(即PHP)方面,您应该考虑这些参数并处理它们。

也许发送像functionName = func1&amp; params = [1,2,%22a%22]这样的参数并将其处理为:

$func = $_GET['functionName'];
$params = json_decode($_GET['params']);

if (function_exists($func))
{
    $result = call_user_func_array($func, $params);
    echo json_encode($result);
}
else
{
    echo "unexistent function";
}

可以完成这项工作,但是,再一次,AJAX不知道这一点,也永远不会,因为AJAX与PHP无关。