2013-04-02 12 views
30

Próbuję wywołać funkcję php z zewnętrznego pliku php do javascript. Mój kod jest inny i duży, więc piszę tutaj przykładowy kod.Jak mogę wywoływać funkcje PHP przez JavaScript?

To jest mój kod 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; 
} 
?> 

To jest mój kod 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> 

Więc to, co chcę robić.

Mój oryginalny plik php nie zawiera tych funkcji matematycznych, ale pomysł jest taki sam.

Jeśli w jakiś sposób nie ma odpowiedniego rozwiązania, zaproponuj mi alternatywę, ale powinna wywołać wartości z zewnętrznego php.

+10

php jest po stronie serwera js po stronie klienta. Będziesz musiał użyć ajaxu lub odświeżenia strony przy pomocy gets/posts lub spróbować stworzyć równoważną funkcję js. – Class

Odpowiedz

52

Tak, ty Można zrobić ajax żądanie do serwera z danymi parametrów żądań, jak to (bardzo prosty):

Należy pamiętać, że poniższy kod wykorzystuje 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); 
        } 
      } 
}); 

i your_functions_address.php tak:

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

Czy możesz mi wyjaśnić ten kod? I jak z niego korzystać pod różnymi funkcjami i dokumentami? – KingsInnerSoul

23

Try This

<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

Dzięki Sandeep. Rozwiązanie działa jak uroki ....... – DKBHOI

+2

Chociaż to rozwiązanie działa, nie jest to czysty i dobry sposób na zrobienie tego. Ma ścisłą zależność między kodem klienta a kodem serwera. Znacznie lepszy projekt będzie przy użyciu ajax, aby wysłać żądanie do strony php, która ma wywołanie funkcji php. – Shadi

+0

Czy można wywołać funkcję w ten sposób? –

1

Jeśli rzeczywiście chcesz wysłać dane do skryptu php na przykład można to zrobić:

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

Spróbuj spojrzeć na CASSIS. Pomysł polega na połączeniu PHP z JS, aby oba mogły działać po stronie klienta i serwera.

6

Musisz utworzyć API: Twoje funkcje js wykonać żądań AJAX w usłudze internetowej

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

po stronie php, musisz sprawdzić parametry działania w celu realizacji funkcji PROPRE (zasadniczo oświadczenie włącz $ _GET [ "akcja"] zmienna)

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

pisałem jakiś skrypt dla mnie jego pracy .. Mam nadzieję, że może ona przydatna

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

W moim lokalnym systemie sprawdziłem, czy działa dla mnie .... :) – Naresh

7

używania dokumentu.Napisać na przykład

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

Upewnij się, że podczas korzystania z tego przyłączasz się do " Mikeys4u

+0

niezły^^ wielkie dzięki! –

1

tę pracę idealnie dla mnie:

Aby wywołać funkcję PHP (z parametrami też) można, jak wiele osób mówi, wysyłać parametr otwierania pliku PHP i stamtąd sprawdź wartość parametru, aby wywołać funkcję. Ale możesz też zrobić, że wiele osób twierdzi, że to niemożliwe: bezpośrednio wywołaj odpowiednią funkcję PHP, bez dodawania kodu do pliku PHP.

znalazłem sposób:

To dla 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); 
      } 
     }); 
    } 


To dla pliku PHP, który nie jest plik PHP, ale inna, która ścieżka jest napisana wurlZmienna funkcji JScallPHP, wymagana do oceny kodu PHP. Plik ten jest nazywany „phpCompiler.php” i to w katalogu głównym swojej stronie:

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


Więc kod PHP pozostanie równa wyjątkiem wartości zwracanych, które będą echem:

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


proponuję, aby pamiętać, że jQuery jest wymagany:
pobrać z Google CDN:

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

lub Microsoft CDN: „Wolę Google! :)”

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

Lepiej jest, aby pobrać plik z jednego z dwóch CDN i umieścić go jako lokalnego pliku, więc ładowanie uruchomienie witryny

szybciej! Wybór należy do Ciebie!

!.
teraz skończył właśnie powiedzieć jak używać callPHP funkcja ta jest obsługa JavaScript, żeby zadzwonić 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

Spróbujmy swojego rozwiązania, dla mnie działa! Po skomentowaniu jakiegokolwiek probemu! –

Powiązane problemy