从JavaScript调用php函数

有没有一种方法可以通过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") ,当我点击名为“testing”,将调用PHP函数的HREF。

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

在服务器响应(大概是输出)之后,另一个Javascript函数/事件给了你一个处理这个输出的地方,包括简单地把它粘在页面上,就像任何其他的HTML一样。

你可以用“纯手工”的方式做到这一点,或者你可以使用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代码。 当然,你可以通过收紧块或者使用更多简洁的逻辑运算符来缩短这个范围,但是还有很多事情要做。 如果你打算在你的项目上做很多这种types的事情,你可能会更好的一个JavaScript库。

从上面使用相同的HTML和PHP,这是你的整个脚本(页面上包含jQuery)。 为了更加符合jQuery的一般风格,我已经收紧了一些代码,但是你明白了:

 // handles the click event, sends the query var 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,你就完成了。

文档

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

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

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

使用AJAX调用,我们可以使用POST和GET方法调用php函数,