wal*_*eek 48 javascript php function
我试图从外部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;
}
?>
Run Code Online (Sandbox Code Playgroud)
这是我的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>
Run Code Online (Sandbox Code Playgroud)
所以这就是我想要做的.
我原来的 PHP文件不包含这些数学函数,但想法是一样的.
如果有一些它没有一个合适的解决方案,那么请你建议一个替代方案,但它应该从外部PHP调用值.
Vic*_*tor 74
是的,您可以使用请求参数中的数据对服务器执行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);
}
}
});
Run Code Online (Sandbox Code Playgroud)
和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);
?>
Run Code Online (Sandbox Code Playgroud)
San*_*pil 33
试试这个
<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>
Run Code Online (Sandbox Code Playgroud)
Ani*_*ani 11
以document.write为例,
<script>
document.write(' <?php add(1,2); ?> ');
document.write(' <?php milt(1,2); ?> ');
document.write(' <?php divide(1,2); ?> ');
</script>
Run Code Online (Sandbox Code Playgroud)
您需要创建一个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);
});
}
Run Code Online (Sandbox Code Playgroud)
在php方面,你必须检查action参数才能执行propre函数(基本上是$ _GET ["action"]变量的switch语句)
小智 7
要调用 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);
}
});
}
Run Code Online (Sandbox Code Playgroud)
这是一个 PHP 文件,它不是您的 PHP 文件,而是另一个文件,其路径写在 url JS 函数的变量中 callPHP ,并且需要评估 PHP 代码。该文件名为“phpCompiler.php”,位于您网站的根目录中:
<?php
$code = urldecode($_REQUEST['code']);
$lines = explode(";", $code);
foreach($lines as $line)
eval(trim($line, " ") . ";");
?>
Run Code Online (Sandbox Code Playgroud)
因此,您的 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;
}
?>
Run Code Online (Sandbox Code Playgroud)
我建议您记住 jQuery 是必需的:
从 Google CDN 下载它:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
Run Code Online (Sandbox Code Playgroud)
或来自 Microsoft CDN:“我更喜欢 Google!:)”
<script src="https://ajax.aspnetcdn.com/ajax/jQuery/jquery-3.1.1.min.js"></script>
Run Code Online (Sandbox Code Playgroud)
更好的方法是从两个 CDN 之一下载文件并将其作为本地文件,这样您网站的启动加载速度会更快!
选择权在你!
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.
});
Run Code Online (Sandbox Code Playgroud)
小智 7
无效函数
<?php
function printMessage() {
echo "Hello World!";
}
?>
<script>
document.write("<?php printMessage() ?>");
</script>
Run Code Online (Sandbox Code Playgroud)
返回值函数
<?php
function getMessage() {
return "Hello World!";
}
?>
<script>
var text = "<?php echo getMessage() ?>";
</script>
Run Code Online (Sandbox Code Playgroud)
索引.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>
Run Code Online (Sandbox Code Playgroud)
服务
<?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;
}
?>
Run Code Online (Sandbox Code Playgroud)
相关文件
<?php
function EnviaCorreoDesdeWeb($nombre, $correo, $pregunta)
{
...
}
?>
Run Code Online (Sandbox Code Playgroud)
例如,如果您确实想将数据发送到 php 脚本,您可以这样做:
php:
<?php
$a = $_REQUEST['a'];
$b = $_REQUEST['b']; //totally sanitized
echo $a + $b;
?>
Run Code Online (Sandbox Code Playgroud)
Js(使用jquery):
$.post("/path/to/above.php", {a: something, b: something}, function(data){
$('#somediv').html(data);
});
Run Code Online (Sandbox Code Playgroud)