2013-04-02 26 views
30

Tôi đang cố gắng gọi một hàm php từ một tệp php bên ngoài vào javascript. Mã của tôi là khác nhau và lớn, vì vậy tôi đang viết một mã mẫu ở đây.Tôi có thể gọi các hàm PHP bằng JavaScript như thế nào?

Đây là mã php của tôi:

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

Đây là mã javascript của tôi:

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

Vì vậy, đây là những gì tôi muốn làm.

Tệp php gốc của tôi không bao gồm các hàm toán học này nhưng ý tưởng là giống nhau.

Nếu bằng cách nào đó nó không có giải pháp thích hợp, thì vui lòng đề xuất cho tôi giải pháp thay thế, nhưng nó sẽ gọi giá trị từ php bên ngoài.

+10

php là js phía máy chủ là phía máy khách. Bạn sẽ cần phải sử dụng ajax hoặc làm mới trang với các bài viết/bài viết hoặc thử tạo một hàm tương đương js. – Class

Trả lời

52

Có, bạn có thể làm theo yêu cầu ajax đến máy chủ với dữ liệu của bạn trong các thông số yêu cầu, như thế này (rất đơn giản):

Lưu ý rằng đoạn mã sau sử dụng 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); 
        } 
      } 
}); 

và your_functions_address.php như thế này:

<?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

Bạn có thể giải thích mã này cho tôi không? Và làm thế nào để sử dụng nó dưới các chức năng khác nhau và các di tích? – KingsInnerSoul

23

Hãy thử này

<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

Cảm ơn Sandeep. Giải pháp hoạt động như quyến rũ ....... – DKBHOI

+2

Mặc dù giải pháp này hoạt động, nó không phải là một cách sạch sẽ và một cách tốt để làm điều đó. Nó có sự phụ thuộc chặt chẽ giữa mã máy khách và máy chủ. Thiết kế tốt hơn nhiều sẽ sử dụng ajax để gửi yêu cầu đến một trang php có chức năng gọi php. – Shadi

+0

Có thể gọi một hàm theo cách này không ?? –

1

Nếu bạn thực sự muốn gửi dữ liệu đến một kịch bản php ví dụ bạn có thể làm điều này:

Các php:

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

echo $a + $b; 
?> 

Js (sử dụng jquery) :

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

Thử nhìn vào CASSIS. Ý tưởng là trộn PHP với JS để cả hai có thể làm việc trên phía máy khách và phía máy chủ.

6

Bạn cần phải tạo một API: chức năng js của bạn thực hiện các yêu cầu AJAX trên dịch vụ web của bạn

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

ở phía bên php, bạn sẽ phải kiểm tra thông số hành động để thực hiện chức năng propre (cơ bản là một câu lệnh switch trên $ _GET [ "hành động"] biến)

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

tôi đã viết một số kịch bản cho tôi làm việc của mình .. Tôi hy vọng nó có thể hữu ích cho bạn

<?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

Trong hệ thống cục bộ của tôi, tôi đã kiểm tra nó hoạt động cho tôi .... :) – Naresh

7

tài liệu sử dụng.viết ví dụ,

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

Hãy chắc chắn rằng khi sử dụng điều này mà bạn tham gia vào ' Mikeys4u

+0

nice ^^ cảm ơn rất nhiều! –

1

công việc này một cách hoàn hảo đối với tôi:

Để gọi một hàm PHP (với các thông số quá), bạn có thể, giống như rất nhiều người dân cho biết, gửi một tham số mở file PHP và từ đó kiểm tra giá trị của tham số để gọi hàm. Nhưng bạn cũng có thể thực hiện rất nhiều người nói rằng điều đó là không thể: trực tiếp gọi hàm PHP thích hợp, mà không cần thêm mã vào tệp PHP.

Tôi tìm thấy một cách:

này cho 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); 
      } 
     }); 
    } 


này cho một tập tin PHP mà không phải là file PHP của bạn, nhưng khác, mà con đường được viết bằngurlbiến chức năng JScallPHPvà bắt buộc phải đánh giá mã PHP. Tập tin này được gọi là 'phpCompiler.php' và đó là trong thư mục gốc của trang web của bạn:

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


Vì vậy, mã PHP của bạn vẫn bằng trừ giá trị trả lại, mà sẽ được lặp lại:

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


tôi đề nghị bạn nên nhớ rằng jQuery được yêu cầu:
Tải về nó từ Google CDN:

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

hoặc từ Microsoft CDN: "Tôi thích Google! :)"

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

Thà để tải về các tập tin từ một trong hai CDN và đặt nó dưới dạng tập tin địa phương, do đó tải khởi động của trang web của bạn

nhanh hơn! Sự lựa chọn thuộc về các ngươi!

!.
Bây giờ bạn đã hoàn thành tôi chỉ cho bạn biết làm thế nào để sử dụng callPHP chức năng này là hoạt Javascript để gọi 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

Hãy thử giải pháp của tôi, cho tôi nó hoạt động! Sau khi bạn bình luận cho bất kỳ probem! –

Các vấn đề liên quan