从 JavaScript 调用 php 函数

IT技术 php javascript html ajax
2021-01-22 01:22:23

有没有办法通过 JS 函数运行 php 函数?

像这样:

<script type="text/javascript">
function test(){
document.getElementById("php_code").innerHTML="<?php 
query("hello");       ?>";    
}
</script>

<a href="#" style="display:block; color:#000033; font-family:Tahoma; font-size:12px;"     
onclick="test(); return false;"> test </a>
<span id="php_code"> </span>

我基本上想运行 php 函数query("hello"),当我单击称为“Test”的 href 时,它将调用 php 函数。

4个回答

本质上,这就是AJAX用途您的页面加载,并向元素添加一个事件。当用户触发事件时,比如通过单击某物,您的 Javascript 使用XMLHttpRequest 对象向服务器发送请求。

在服务器响应后(大概是输出),另一个 Javascript 函数/事件为您提供了一个处理该输出的地方,包括像任何其他 HTML 一样简单地将其粘贴到页面中。

您可以使用普通的 Javascript 来“手工”完成,也可以使用 jQuery。根据项目的大小和特定情况,使用普通的 Javascript 可能更简单。

纯Javascript

在这个非常基本的例子中,我们myAjax.php在用户点击链接时发送一个请求服务器将生成一些内容,在本例中为“hello world!”。我们将放入带有 id 的 HTML 元素output

javascript

// handles the click event for link 1, sends the query
function getOutput() {
  getRequest(
      'myAjax.php', // URL for the PHP file
       drawOutput,  // handle successful request
       drawError    // handle error
  );
  return false;
}  
// handles drawing an error message
function drawError() {
    var container = document.getElementById('output');
    container.innerHTML = 'Bummer: there was an error!';
}
// handles the response, adds the html
function drawOutput(responseText) {
    var container = document.getElementById('output');
    container.innerHTML = responseText;
}
// helper function for cross-browser request object
function getRequest(url, success, error) {
    var req = false;
    try{
        // most browsers
        req = new XMLHttpRequest();
    } catch (e){
        // IE
        try{
            req = new ActiveXObject("Msxml2.XMLHTTP");
        } catch(e) {
            // try an older version
            try{
                req = new ActiveXObject("Microsoft.XMLHTTP");
            } catch(e) {
                return false;
            }
        }
    }
    if (!req) return false;
    if (typeof success != 'function') success = function () {};
    if (typeof error!= 'function') error = function () {};
    req.onreadystatechange = function(){
        if(req.readyState == 4) {
            return req.status === 200 ? 
                success(req.responseText) : error(req.status);
        }
    }
    req.open("GET", url, true);
    req.send(null);
    return req;
}

HTML

<a href="#" onclick="return getOutput();"> test </a>
<div id="output">waiting for action</div>

PHP

// file myAjax.php
<?php
  echo 'hello world!';
?>

试试看:http : //jsfiddle.net/GRMule/m8CTk/


使用 javascript 库(jQuery 等)

可以说,这是很多 Javascript 代码。当然,您可以通过收紧块或使用更简洁的逻辑运算符来缩短它,但是那里还有很多事情要做。如果您计划在您的项目中做很多此类事情,那么使用 javascript 库可能会更好。

使用与上面相同的 HTML 和 PHP,这是您的整个脚本(页面中包含 jQuery)。为了与 jQuery 的一般风格更加一致,我稍微收紧了代码,但你明白了:

// handles the click event, sends the query
function getOutput() {
   $.ajax({
      url:'myAjax.php',
      complete: function (response) {
          $('#output').html(response.responseText);
      },
      error: function () {
          $('#output').html('Bummer: there was an error!');
      }
  });
  return false;
}

试试看:http : //jsfiddle.net/GRMule/WQXXT/

暂时不要急于使用 jQuery:添加任何库仍然会向您的项目添加数百或数千行代码,就像您已经编写它们一样。在 jQuery 库文件中,您会发现与第一个示例中的代码类似的代码,以及更多的. 这可能是一件好事,也可能不是。计划并考虑项目的当前规模和未来扩展的可能性以及目标环境或平台。

如果这就是您需要做的全部,那么编写一次普通的 javascript 就大功告成了。

文档

当我使用您的代码时,由于在函数声明前使用了“var”,因此出现错误。删除“var”就可以了。
2021-03-17 01:22:23
@Hanoncs 由于服务器端代码几乎有无限可能的排列,所以我猜测 OP 使用的是什么架构是没有建设性的,甚至是不可能的。它与直接问题陈述也没有密切关系,因为 OP 不引用 POST(或 GET)或传递值的需要。我认为您的反对意见放错了地方,我不会在我的答案中添加对 OP 中未包含的主题的任意猜测。感谢您的反馈。
2021-03-26 01:22:23
-1,回答一半,OP 询问如何从 javascript 调用 php 函数。Pou 只展示了如何调用 php PAGE。您需要在 ajax 调用中添加 post 变量,并且 php 检查这些 post 变量,然后在这些 post 变量存在时调用该 php 函数。
2021-04-02 01:22:23

PHP 在服务器端进行评估;javascript 在客户端/浏览器上进行评估,因此您不能直接从 javascript 调用 PHP 函数但是您可以使用 AJAX 向将激活 PHP 函数的服务器发出 HTTP 请求。

@Hanoncs:这就是答案。OP 询问您是否可以通过 JS 执行 PHP 函数。答案是——你不能如果他会问您是否可以发出 HTTP 请求,使 Web 服务器激活将运行 PHP 函数的 PHP 脚本 - 那么是的 -是可能的。但是他没有要求这个,所以我不写不相关的数据。
2021-03-15 01:22:23
哈哈,伙计,你知道这就是 OP 提出的问题的意思。如果他知道如何完全像那样解释它,他就会知道如何去做。
2021-04-05 01:22:23

从 JS 执行 PHP 的唯一方法是 AJAX。您可以将数据发送到服务器(例如,GET /ajax.php?do=someFunction)然后在 ajax.php 中编写:

function someFunction() {
    echo 'Answer';
}

if ($_GET['do'] === "someFunction") {
    someFunction();
}

然后,用 JS 找到答案(我使用 jQuery 来发出 AJAX 请求)

可能您需要某种格式的答案。请参阅 JSON 或 XML,但 JSON 易于与 JavaScript 一起使用。在 PHP 中你可以使用函数 json_encode($array); 获取数组作为参数。

我最近发布了一个 jQuery 插件,它允许您以各种方式进行 PHP 函数调用:https : //github.com/Xaxis/jquery.php

简单示例用法:

// Both .end() and .data() return data to variables
var strLenA = P.strlen('some string').end();
var strLenB = P.strlen('another string').end();
var totalStrLen = strLenA + strLenB;
console.log( totalStrLen ); // 25

// .data Returns data in an array
var data1 = P.crypt("Some Crypt String").data();
console.log( data1 ); // ["$1$Tk1b01rk$shTKSqDslatUSRV3WdlnI/"]
除了人们对通过 JavaScript 调用 PHP 函数的明显偏见之外,请向我解释为什么我的答案被否决的原因如此之多?我正在用解决方案合法地回答手头的问题,不是吗?
2021-03-11 01:22:23