如何通过 JavaScript 调用 PHP 函数?

IT技术 javascript php function
2021-01-19 11:15:22

我正在尝试从外部 PHP 文件调用 PHP 函数到 JavaScript 脚本中。我的代码不同而且很大,所以我在这里写了一个示例代码。

这是我的 PHP 代码:

<?php
function add($a,$b){
  $c=$a+$b;
  return $c;
}
function mult($a,$b){
  $c=$a*$b;
  return $c;
}

function divide($a,$b){
  $c=$a/$b;
  return $c;
}
?>

这是我的 JavaScript 代码:

<script>
  var phpadd= add(1,2); //call the php add function
  var phpmult= mult(1,2); //call the php mult function
  var phpdivide= divide(1,2); //call the php divide function
</script>

所以这就是我想要做的。

我的原始PHP 文件不包含这些数学函数,但想法是相同的。

如果某些方法没有合适的解决方案,那么请您提出替代方案,但它应该从外部 PHP 调用值。

6个回答

是的,您可以使用请求参数中的数据向服务器发出 ajax 请求,如下所示(非常简单):

请注意,以下代码使用了jQuery

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
    header('Content-Type: application/json');

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

    }

    echo json_encode($aResult);

?>
你能向我解释一下这段代码吗?以及如何在不同的函数和参数下使用它?
2021-03-11 11:15:22
是的,很好的答案......我只是添加到关于 jQuery 的注释中,这往往会更慢。另一种选择是使用浏览器原生 XMLHttpRequest,例如这里blog.garstasio.com/you-dont-need-jquery/ajax/#posting
2021-03-17 11:15:22
header('内容类型:应用程序/json'); 我认为你不需要这条线。
2021-03-23 11:15:22
@Victor 我试过你的代码,但它永远不会进入我的 PHP 函数
2021-03-30 11:15:22
我正在寻找在输入更改时调用 php 函数的方法,所以这给了我一个线索,我最终使用了 fetch,谢谢
2021-04-09 11:15:22

试试这个

<script>
  var phpadd= <?php echo add(1,2);?> //call the php add function
  var phpmult= <?php echo mult(1,2);?> //call the php mult function
  var phpdivide= <?php echo divide(1,2);?> //call the php divide function
</script>
@Shadi - 我很好奇,“客户端和服务器代码之间的紧密依赖关系”有什么问题?是否存在潜在问题,或者这只是“整洁编码”的问题?
2021-03-12 11:15:22
尽管此解决方案有效,但它不是一种干净且好的方法。它在客户端和服务器代码之间具有紧密的依赖性。更好的设计是使用 ajax 将请求发送到具有 php 函数调用的 php 页面。
2021-03-24 11:15:22
<脚本> var num1; var num2; var phpadd= <?php echo add($num1, $num2);?> </script> 可以这样调用函数吗??
2021-03-27 11:15:22
上述解决方案有效。但是这里有一个代码组织的问题。此方法强制 add()、mult()、divide() 函数在与脚本相同的文件中声明。使用 AJAX,您被迫写入不同的文件。如果功能很短,这无关紧要。但是如果函数很长,最好写在不同的文件上。
2021-03-28 11:15:22
@ashleedawg 好问题,好像使用 Ajax 以某种方式不需要客户端和服务器端之间的“紧密依赖”。
2021-04-08 11:15:22

使用 document.write 例如,

<script>
  document.write(' <?php add(1,2); ?> ');
  document.write(' <?php milt(1,2); ?> ');
  document.write(' <?php divide(1,2); ?> ');
</script>
确保在使用它时加入“<?php”,因为脚本将不起作用。如果此代码显示为“< ?php”,则此代码在 stackoverflow 中的格式不正确
2021-03-26 11:15:22

您需要创建一个 API:您的 js 函数在您的 Web 服务上执行 AJAX 请求

  var mult = function(arg1, arg2)
    $.ajax({
      url: "webservice.php?action=mult&arg1="+arg1+"&arg2="+arg2
    }).done(function(data) {
      console.log(data);
    });
  }

在 php 方面,您必须检查 action 参数才能执行 propre 函数(基本上是 $_GET["action"] 变量上的 switch 语句)

你为什么使用函数表达式?这更适合函数声明。
2021-03-12 11:15:22

索引.php

<body>
...
<input id="Div7" name="Txt_Nombre" maxlenght="100px" placeholder="Nombre" />
<input id="Div8" name="Txt_Correo" maxlenght="100px" placeholder="Correo" />
<textarea id="Div9" name="Txt_Pregunta" placeholder="Pregunta" /></textarea>

<script type="text/javascript" language="javascript">

$(document).ready(function() {
    $(".Txt_Enviar").click(function() { EnviarCorreo(); });
});

function EnviarCorreo()
{
    jQuery.ajax({
        type: "POST",
        url: 'servicios.php',
        data: {functionname: 'enviaCorreo', arguments: [$(".Txt_Nombre").val(), $(".Txt_Correo").val(), $(".Txt_Pregunta").val()]}, 
         success:function(data) {
        alert(data); 
         }
    });
}
</script>

服务.php

<?php   
    include ("correo.php");

    $nombre = $_POST["Txt_Nombre"];
    $correo = $_POST["Txt_Corro"];
    $pregunta = $_POST["Txt_Pregunta"];

    switch($_POST["functionname"]){ 

        case 'enviaCorreo': 
            EnviaCorreoDesdeWeb($nombre, $correo, $pregunta);
            break;      
    }   
?>

相关文件

<?php
    function EnviaCorreoDesdeWeb($nombre, $correo, $pregunta)
    { 
       ...
    }
?>