从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,你就完成了。
文档
- MDN上的AJAX – https://developer.mozilla.org/en/ajax
- MDN上的
XMLHttpRequest
– https://developer.mozilla.org/zh/XMLHttpRequest - MSDN上的
XMLHttpRequest
– http://msdn.microsoft.com/zh-cn/library/ie/ms535874%28v=vs.85%29.aspx - jQuery – http://jquery.com/download/
-
jQuery.ajax
– http://api.jquery.com/jQuery.ajax/
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函数,