63

外部 PHP ファイルから 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 から値を呼び出す必要があります。

4

12 に答える 12

13

たとえば、document.write を使用します。

<script>
  document.write(' <?php add(1,2); ?> ');
  document.write(' <?php milt(1,2); ?> ');
  document.write(' <?php divide(1,2); ?> ');
</script>
于 2013-11-25T05:53:45.790 に答える
5

これは私にとって完璧に機能します:

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 ファイルで、パスが url JS function の変数に記述されて callPHP おり、PHP コードを評価するために必要です。このファイルは「phpCompiler.php」と呼ばれ、Web サイトのルート ディレクトリにあります。

<?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 が必要であることを覚えておくことをお勧めします:
Google CDN からダウンロードします:

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

または Microsoft CDN から: 「私は Google の方が好きです! :)」

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

2 つの CDN のいずれかからファイルをダウンロードしてローカル ファイルとして配置することをお勧めします。これにより、Web サイトの起動時の読み込みが速くなります。

選択はあなた次第です!


これで完了です。 関数の使用方法を説明するだけです。callPHP これは、PHP を呼び出す JavaScript です。

//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.
        });
于 2016-12-27T12:00:41.663 に答える
4

たとえば、実際にデータを 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);
});
于 2013-04-02T06:49:19.167 に答える
3

私はそれが機能するためにいくつかのスクリプトを書きました..それがあなたに役立つことを願っています

<?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>
于 2013-10-18T13:03:17.893 に答える
1

CASSISを見てみてください。アイデアは、PHP と JS を組み合わせて、両方がクライアント側とサーバー側で動作できるようにすることです。

于 2013-04-02T08:14:38.033 に答える