从JavaScript调用php函数


80

有没有一种方法可以通过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调用所需的方法外,没有其他方法可以做到这一点。
TheVillageIdiot

9
您知道:PHP在服务器上运行,但是JS在客户端上运行吗?这样无法正常工作。
KingCrunch

等待等待,<?php query("hello"); ?>页面加载时不是由php渲染的吗?如果是,那么他可以query("hello")在js函数中获取输出。
TheVillageIdiot 2011年

我知道上面的代码是错误的,但是我只是用它来显示我想要的内容
Jason Russell

Answers:


144

本质上,这就是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,然后就可以完成。

文献资料


3
-1,一半的答案,OP询问如何从javascript调用php函数。Pou仅展示了如何调用php PAGE。您需要在ajax调用中添加post变量,并在php中检查这些post变量,然后在存在这些post变量的情况下调用该php函数。
MH

6
@Hanoncs服务器端代码的排列方式几乎是无限可能的,对于我来说,猜测OP正在使用哪种体系结构是没有建设性的甚至是不可能的。这也不与即时问题声明密切相关,因为OP不引用POST(或GET)或需要传递值。我认为您的否决票放错了地方,我也不会在我的答案中添加对OP中未包含的主题的任意猜测。感谢您的反馈。
克里斯·贝克

使用您的代码时,由于在函数声明前面使用了“ var”,因此出现错误。删除“ var”,它可以工作。
贾登·劳森

16

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


3
@Hanoncs:这就是答案。OP询问您是否可以通过JS执行PHP函数。答案是-你不能。如果他问你是否可以发出一个HTTP请求,这将使Web服务器激活的PHP脚本将运行一个PHP函数-然后是-是可能的。但是他没有要求这个,所以我不写无关的数据。
2015年

8
哈哈,加油,你知道那是他的问题所代表的意思。如果他知道如何完全像那样解释它,他将已经知道如何去做。
MH

11

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


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/"]

4
除了人们在通过JavaScript调用PHP函数方面存在明显的偏见外,还向我确切解释为什么我的答案被否决了吗?我正在以一种解决方案合法地回答眼前的问题,不是吗?
Xaxis
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.