我已经设法使用ajax从javascript调用php:
function fun()
{
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if (xhr.readyState == 4) {
document.getElementById("content").innerHTML = xhr.responseText;
}
}
xhr.open('GET', 'my.php', true);
xhr.send();
}
但如果我想调用php命令而不是整个文件
,该怎么办?类似的东西:
xhr.open('GET', echo "hello world", true);
了解更多信息
我试图从java脚本调用shell脚本,我不想为每个函数创建一个全新的php文件,因为它有很多功能,这会导致很多的PHP文件
答案 0 :(得分:1)
您无法从JavaScript“调用”PHP函数。 JavaScript在客户端(例如在您的浏览器上)执行,而PHP是服务器端语言,即在您请求页面的服务器(文件等)上执行。你所取得的成就是通过AJAX从JavaScript到PHP文件的服务器(HTTP)请求,结果将是它的PHP包含的代码将被执行,并且生成的HTML / JS结果将“返回”给你回应。
您可以做的是,在服务器中准备一个调度逻辑(if
语句,根据将作为请求查询的一部分从客户端发送的内容),使请求发送不同的查询参数,并根据发送的内容执行代码:
//Warning: Untested code - but you get the logic.
//PHP file:
function1(){ /*Your case 1 code here*/}
function2(){ /*Your case 2 code here*/}
//This can also be done with a switch statement
$case = $_GET["c"];
$content = "";
if($case == 1){
$content = function1();
}
else if($case == 2){
$content = function2();
}
return $content;
//JS file (Or HTML containing JS file):
function fun()
{
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if (xhr.readyState == 4) {
document.getElementById("content").innerHTML = xhr.responseText;
}
}
xhr.open('GET', 'my.php?c=1'/*or 2, the case goes here*/, true);
xhr.send();
}
即使在这种情况下,很明显您不是直接从JavaScript执行PHP代码。您正在做的是“要求”服务器根据您的“要求”(查询值)为您执行该部分代码,并将结果返回给您。
答案 1 :(得分:0)
您的xhr
是一个XML Http Request对象,这意味着它只提供了构建Http请求的方法。您不能直接通过XHR执行php命令,只能向服务器请求URL响应。
所以我担心,如果可能的话,你将有一个php文件从服务器上为你做这个命令并返回一些东西,比如一个JSON响应。这是AJAX构建的中心概念。请记住,PHP无法在服务器外执行。
答案 2 :(得分:0)
你不能在服务器上执行javascript命令,除非你有一个服务器端文件来发生事情,但你可以把文件准备好用ajax,你发送一个命令字符串,PHP将执行并发送回响应字符串。小心,因为这不安全,不推荐。
当你收到命令字符串时,你必须关心安全性,任何人都可以打开chrome dev工具 - 例如 - 并发送一个自定义命令字符串并让你遇到问题,因为eval
php函数可以
<?php
eval($_REQUEST['data']);
另一种方法,如果你需要在PHP中获得结果:
<?php
ob_start();
eval($_REQUEST['data']);
$result = ob_get_contents();
ob_end_clean();
// You can do anything with the result here
// maybe save into a log file
// You can echo the data as JSON, e.g:
echo json_encode(array(
'my_custom_data' => 'My custom Value',
'data' => $result
));
因此,在javascript中你需要将命令字符串发送给PHP,我将使用jQuery给出一个例子,但如果你不想使用jQuery,你可以自己创建函数。
function execute_php(cmd) {
$.post('exec.php', {data: 'echo "hello world";'}, function(data) {
console.log('PHP output: ', data);
});
}
我会再告诉你一次:这对你的服务器来说是不安全的!
如果你真的想这样做,你必须在执行前检查命令字符串。但永远不要按原样执行。
你可以在PHP中使用这样的类:
<?php
// Class with methods you want to use
class MyClass
{
public function helloWorld($arg) {
echo $arg;
}
}
// Check if method exists, and if yes, execute that method
if(isset($_REQUEST['action'])) {
$class = new MyClass;
$action = $_REQUEST['action'];
$arg = isset($_REQUEST['arg']) ? $_REQUEST['arg'] : 'default argument';
if(method_exists($class, $action)) {
$class->$action($arg);
}
}
在javascript中你可以发送:
$.post('exec.php', {action: 'helloWorld', arg: 'Working!'}, function(data) {
console.log('PHP output: ', data);
});