【问题标题】:How can i call one of many php functions with ajax? [duplicate]如何使用 ajax 调用许多 php 函数之一? [复制]
【发布时间】:2014-04-10 08:36:36
【问题描述】:

我有 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);
      }
  });
});

函数.php

function a(){
    echo "result";
}

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

【问题讨论】:

    标签: php ajax


    【解决方案1】:

    在 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 中为 987654326@,而 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);
            }
        });
    });
    

    【讨论】:

    • 啊。所以字符串应该在ajax数据属性中传递?
    • 嗯,在我的示例中,它应该在 URL 参数中。您可以在数据中传递它,然后使用$_POST 而不是$_GET
    • 如果它带有 $_GET ajax url 属性,例如: url: "functions.php?op=update"?
    • 谢谢,我试试。最后一个问题,你认为用 html 链接调用我的 ajax 的最聪明的方法是什么?就像 $(document).on("click", ".link", function() { ajax }); ?
    • 这样的事情似乎很合理。
    【解决方案2】:

    您可以使用请求参数中的数据向服务器发出 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);
    
    ?>
    

    【讨论】:

      【解决方案3】:

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

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

      所以,AJAX 不发出函数,因为 AJAX 与 PHP 无关,而是与 HTTP 请求有关。

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

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

      也许发送诸如 functionName=func1&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 无关。

      【讨论】:

      • 如何发送函数名和参数? call_user_func_array 有什么作用?
      • 当您使用 jQuery 调用 .ajax({}) 时,将它们作为参数发送到 data 属性中,例如:.ajax({method:"get", data:{functionName:"func1" , 参数:JSON.stringify([1,2,"a"])}})
      • 如果您的浏览器没有原生 JSON 对象,您可能需要包含 JSON.js 文件
      猜你喜欢
      • 2011-11-10
      • 2011-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多