从 JavaScript 调用 php 函数

Posted

技术标签:

【中文标题】从 JavaScript 调用 php 函数【英文标题】:Call php function from JavaScript 【发布时间】:2011-11-02 04:25:22 【问题描述】:

有没有办法可以通过 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调用所需的方法。 你知道:PHP运行在服务器端,而JS运行在客户端?这不能以这种方式工作。 等一下,页面加载时不是&lt;?php query("hello"); ?&gt;是php渲染的吗?如果是,那么他可以在 js 函数中得到query("hello") 的输出。 我知道上面的代码是错误的,但我只是用它来显示我想要的东西 Javascript and PHP functions的可能重复 【参考方案1】:

本质上,这就是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 代码。当然,您可以通过收紧块或使用更简洁的逻辑运算符来缩短它,但仍然有很多事情要做。如果您打算在您的项目中做很多此类事情,那么最好使用 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就完成了。

文档

AJAX 在 MDN - https://developer.mozilla.org/en/ajax XMLHttpRequest MDN - https://developer.mozilla.org/en/XMLHttpRequest XMLHttpRequest MSDN - http://msdn.microsoft.com/en-us/library/ie/ms535874%28v=vs.85%29.aspx jQuery - http://jquery.com/download/ jQuery.ajax - http://api.jquery.com/jQuery.ajax/

【讨论】:

-1,回答一半,OP询问如何从javascript调用php函数。 Pou 只展示了如何调用 php PAGE。您需要在 ajax 调用和 php 中添加 post 变量来检查这些 post 变量,然后如果这些 post 变量存在则调用该 php 函数。 @Hanoncs 由于服务器端代码的排列几乎是无限的,我无法猜测 OP 使用的是什么架构,甚至是不可能的。这也与直接的问题陈述无关,因为 OP 不引用 POST(或 GET)或传递值的需要。我认为你的反对意见是错误的,我不会在我的答案中添加关于 OP 中未包含的主题的任意猜测。不过感谢您的反馈。 当我使用你的代码时,由于在函数声明前使用了“var”,我得到了一个错误。删除“var”就可以了。【参考方案2】:

我最近发布了一个 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 函数有明显的偏见之外,请向我解释一下为什么我的答案被如此多地否决了?我正在用解决方案合法地回答手头的问题,不是吗?【参考方案3】:

从 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);将数组作为参数。

【讨论】:

【参考方案4】:

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

【讨论】:

@Hanoncs:这的答案。 OP 询问您是否可以通过 JS 执行 PHP 函数。答案是 - 你不能。如果他会问您是否可以发出 HTTP 请求,使 Web 服务器激活将运行 PHP 函数的 PHP 脚本 - 那么是的 - that 是可能的。但是他没有要求这个,所以我不写无关的数据。 哈哈,伙计,你知道这就是他的问题的意思。如果他知道如何解释它,他就已经知道该怎么做了。

以上是关于从 JavaScript 调用 php 函数的主要内容,如果未能解决你的问题,请参考以下文章

无法从 Javascript 调用 PHP 函数 [重复]

从 PHP 调用存储在 MongoDB 中的 JavaScript 函数

php WP - 使用AJAX从JavaScript调用WP函数

如何创建值数组并从 PHP 调用 JavaScript 函数

如何将 PHP 字符串传递给 Javascript 函数调用? [复制]

如何在 PHP Scriptable Web Browser 中调用 javascript 函数