php - 从 JavaScript 调用 php 函数

标签 php javascript html ajax

有没有办法通过 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 函数。

最佳答案

本质上,这就是AJAX用于。您的页面将加载,并向元素添加事件。当用户导致事件被触发时,例如单击某物,您的 Javascript 将使用 XMLHttpRequest object向服务器发送请求。

服务器响应后(可能会输出),另一个 Javascript 函数/事件会为您提供处理该输出的位置,包括像任何其他 HTML 片段一样将其简单地粘贴到页面中。

您可以使用纯 Javascript “手动”完成此操作,也可以使用 jQuery。根据项目的大小和特定情况,仅使用纯 Javascript 可能会更简单。

纯 JavaScript

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

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 代码。当然,您可以通过收紧 block 或使用更简洁的逻辑运算符来缩短时间,但仍然有很多事情要做。如果您打算在项目中做很多此类事情,那么使用 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 库文件中,您将找到与第一个示例中类似的代码,以及更多。这可能是一件好事,也可能不是。规划并考虑项目当前的规模和 future 扩展的可能性以及目标环境或平台。

如果这就是您需要做的全部,只需编写一次纯 JavaScript 即可完成。

文档

关于php - 从 JavaScript 调用 php 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37998028/

相关文章:

php - 如何阻止用户发送同一时间段的请求?

php - Woocommerce 删除订单项元

php - ZF2 中同一模块下的多个 namespace

javascript - 单击按钮时显示不同的div

c# - 使用来自 .NET 应用程序的模板生成 HTML

php - 从集合中获取最高值(value)

javascript - 设置列以在 EasyUI 数据网格上显示为排序

javascript - dc.js 和 crossfilter 堆栈条形图,过滤与未过滤

javascript - angular 中的有效 jq,ether angular.element ("#n") 或 $ ("#n")

html - 完整的浏览器宽度条