2013-04-02 135 views
30

我想从一个外部的php文件调用一个php函数到javascript中。我的代码不同而且很大,所以我在这里写了一个示例代码。如何通过JavaScript调用PHP函数?

这是我的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调用值。

+10

php是服务器端JS是客户端。您需要使用ajax或页面刷新gets/posts或尝试创建一个js等效函数。 – Class

回答

52

是的,你在请求参数做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); 

?> 
+3

你可以向我解释这段代码吗?以及如何在不同的功能和参数下使用它? – KingsInnerSoul

23

尝试这个

<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> 
+0

谢谢Sandeep。解决方案就像魅力....... – DKBHOI

+2

虽然这个解决方案的工作原理,但它并不是一个干净和好的方法。它在客户端和服务器代码之间有严格的依赖关系。更好的设计是使用ajax将请求发送到具有php函数调用的php页面。 – Shadi

+0

是否可以通过这种方式调用函数? –

1

如果你真的想将数据发送到PHP脚本,例如,你可以这样做:

的PHP:

<?php 
$a = $_REQUEST['a']; 
$b = $_REQUEST['b']; //totally sanitized 

echo $a + $b; 
?> 

JS(使用jQuery) :

$.post("/path/to/above.php", {a: something, b: something}, function(data){           
    $('#somediv').html(data); 
}); 
1

试试看CASSIS。这个想法是将PHP和JS混合使用,因此它们都可以在客户端和服务器端工作。

6

您需要创建一个API: 你的JS功能上的PHP端Web服务

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

执行AJAX请求,你必须检查动作参数,以执行黑白配功能(基本上在$ _GET [ “行动”]变量switch语句)

3

的index.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> 

servicios.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;  
    } 
?> 

correo.php

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

我写了一些剧本,我的工作。我希望这对你有用

<?php 
if(@$_POST['add']) 
{ 
function add() 
{ 
    $a="You clicked on add fun"; 
    echo $a; 
} 
add(); 
} 
else if (@$_POST['sub']) 
{ 
function sub() 
{ 
    $a="You clicked on sub funn"; 
echo $a; 
} 
sub(); 
} 
?> 
<form action="<?php echo $_SERVER['PHP_SELF'];?>" method="POST"> 

<input type="submit" name="add" Value="Call Add fun"> 
<input type="submit" name="sub" Value="Call Sub funn"> 
<?php echo @$a; ?> 

</form> 
+0

在我的本地系统中,我检查了它对我的工作.... :) – Naresh

7

使用的文件。写 例如,

<script> 
    document.write(' <?php add(1,2); ?> '); 
    document.write(' <?php milt(1,2); ?> '); 
    document.write(' <?php divide(1,2); ?> '); 
</script> 
+1

请确保在使用此参数时加入'<?php',因为该脚本不起作用。如果它显示为'<?php' – Mikeys4u

+0

不错^^非常感谢! –

1

这项工作非常适合我:

要调用PHP函数(参数也行)就可以了,像很多人说,送参数打开PHP文件,从那里检查参数的值来调用函数。但是你也可以做很多人说这是不可能的:直接调用正确的PHP函数,而不需要向PHP文件添加代码。

我找到了一种方法:

这对JavaScript:

function callPHP(expression, objs, afterHandler) { 
     expression = expression.trim(); 
     var si = expression.indexOf("("); 
     if (si == -1) 
      expression += "()"; 
     else if (Object.keys(objs).length > 0) { 
      var sfrom = expression.substring(si + 1); 
      var se = sfrom.indexOf(")"); 
      var result = sfrom.substring(0, se).trim(); 
      if (result.length > 0) { 
       var params = result.split(","); 
       var theend = expression.substring(expression.length - sfrom.length + se); 
       expression = expression.substring(0, si + 1); 
       for (var i = 0; i < params.length; i++) { 
        var param = params[i].trim(); 
        if (param in objs) { 
         var value = objs[param]; 
         if (typeof value == "string") 
          value = "'" + value + "'"; 
         if (typeof value != "undefined") 
          expression += value + ","; 
        } 
       } 
       expression = expression.substring(0, expression.length - 1) + theend; 
      } 
     } 
     var doc = document.location; 
     var phpFile = "URL of your PHP file"; 
     var php = 
      "$docl = str_replace('/', '\\\\', '" + doc + "'); $absUrl = str_replace($docl, $_SERVER['DOCUMENT_ROOT'], str_replace('/', '\\\\', '" + phpFile + "'));" + 
      "$fileName = basename($absUrl);$folder = substr($absUrl, 0, strlen($absUrl) - strlen($fileName));" + 
      "set_include_path($folder);include $fileName;" + expression + ";"; 
     var url = doc + "/phpCompiler.php" + "?code=" + encodeURIComponent(php); 
     $.ajax({ 
      type: 'GET', 
      url: url, 
      complete: function(resp){ 
       var response = resp.responseText; 
       afterHandler(response); 
      } 
     }); 
    } 


这一个PHP文件,该文件是不是你的PHP文件,但另一个,这条路径写入在urlJS函数变量callPHP,它需要评估PHP代码。此文件被称为“phpCompiler.php”和它在你的网站的根目录:

<?php 
$code = urldecode($_REQUEST['code']); 
$lines = explode(";", $code); 
foreach($lines as $line) 
    eval(trim($line, " ") . ";"); 
?> 


所以,你的PHP代码保持等于除了返回值,这将是附和道:

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

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


我建议你要记住,jQuery是必需的:
从谷歌CDN下载:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script> 

或Microsoft CDN:“我更喜欢谷歌! :)”

<script src="https://ajax.aspnetcdn.com/ajax/jQuery/jquery-3.1.1.min.js"></script> 

更好的是从两个CDN中的一个下载文件,并把它作为本地文件,那么你的网站的速度更快!

选择的启动时加载的是你!


现在你说完我只是告诉你如何使用 callPHP 功能这是JavaScript调用PHP:

//Names of parameters are custom, they haven't to be equals of these of the PHP file. 
//These fake names are required to assign value to the parameters in PHP 
//using an hash table. 
callPHP("add(num1, num2)", { 
      'num1' : 1, 
      'num2' : 2 
     }, 
      function(output) { 
       alert(output); //This to display the output of the PHP file. 
     }); 
+0

让我们尝试我的解决方案,对我来说它的工作原理!在您对任何探针发表评论后! – 2017-01-06 12:55:04