我有一个正在调用的JavaScript函数。我需要让它调用PHP函数并返回true / false。
具有该功能的脚本位于文件/db/cancel_hike.php
中我现在的JS看起来像这样:
function uncancelHike( hike_id )
{
//var url = "/db/cancel_hike.php;
var success = null;
var request = window.ActiveXObject ?
new ActiveXObject('Microsoft.XMLHTTP') :
new XMLHttpRequest;
request.open("GET", url , true);
request.onreadystatechange = function()
{
if (request.readyState == 4)
{
var xmlDoc = request.responseXML;
// obtain the array of markers and loop through it
markers = xmlDoc.documentElement.getElementsByTagName("marker");
for (var i = 0; i < markers.length; i++)
{
// obtain the attribues of each marker
success = markers[i].getAttribute("success");
if ( success == "true" )
{
document.getElementById("success").style.display = 'block';
document.getElementById("warning").style.display = 'none';
document.getElementById("error").style.display = 'error';
}
if ( success == "false" )
{
document.getElementById("success").style.display = 'none';
document.getElementById("warning").style.display = 'none';
document.getElementById("error").style.display = 'block';
}
}
}
}
request.send(null);
return false;
}
我遇到的问题是:
答案 0 :(得分:2)
如何在PHP脚本中调用实际函数?
你做不到。您请求URI。
编写一个调用所需函数的PHP脚本,并将其放在您调用的URI中。
(您可以使用查询字符串等作为用于有条件地调用不同函数的if
语句的输入)
我是否绝对需要返回一些XML?或者有没有办法只返回返回的值?
您可以返回任何类型的数据。
我正在使用YUI JS库。我需要打电话给它,还是在这种情况下没有必要?
这是一个图书馆。你永远不需要打电话给它。它通常简化了您必须编写的代码。
答案 1 :(得分:1)
- 如何在PHP脚本中调用实际函数?
- 我是否绝对需要返回一些XML?或者有没有办法只返回返回的值?
醇>
好吧,你没有调用实际的功能。你想要做的是使用GET传递变量,也就是说,通过将它们附加到像file_name.php?var1=this&var2=that
这样的URL来传递var1的“this”和var2等于“that”。您可以使用$_GET['this']
和$_GET['that']
在PHP文件中检索它们。无论PHP通过echo
输出到页面,print_r
等,都会在请求对象中作为其responseText
属性的一部分发回。
您只需将url
中的request.open
设置为您网站上的网址即可。例如,在.js文件中:
request.open("GET", "answer_me.php?hike_id=" + hike_id, true);
在.php文件中:
<?php
$hike_id = $_GET['hike_id'];
if ($hike_id < 5) {
echo "true"; // echo true would return "1", BTW
} else {
echo "false"; // echo false would return nothing
}
请注意,这只会将字符串值返回到request.responseText
为false,因此您可以这样做:
var result = request.responseText;
if (result === "true") {
...
document.getElementById("success").style.display = "block";
...
} else {
...
document.getElementById("success").style.display = "none";
...
}
你不需要它是XML,特别是因为它看起来你并没有真正使用循环(每次都为相同的三个DOM元素赋值)。
老实说,对于AJAX,我建议使用像jQuery(或YUI这样的框架,尽管我没有找到它的AJAX stuff直观)。您的整个代码如下所示:
var $success = $("#success");
var $error = $("#error");
function cancelHikeCallback(data) {
var is_success = (data === "true");
$success.toggle(is_success);
$error.toggle(!is_success);
}
function cancelHike(hikeIdToSend) {
$.get("/db/cancel_hike.php", {hike_id: hikeIdToSend}, cancelHikeCallback);
}
IMO之类的东西,比如jQuery的$.ajax
($.get
是$.ajax
的一种特殊形式),使这些内容更容易阅读和调试。