我有一个按钮点击执行的javascript函数,我有一个包含所有PHP函数的包含文件。其中一个PHP函数返回一个编码为JSON对象的文件名数组。我想从我的Javascript函数中调用此函数,以便我可以使用该数组。我知道我可以调用一个可以运行的PHP文件,但在这种情况下我只想调用一个特定的命名方法。
我尝试了以下但无法使其正常工作(控制台错误:意外<)
function getPHPArray(){
var picArray;
picArray = <?php getPicArrayJson(); ?>;
}
这可以使用XMLHttpRequest完成,还是需要找到另一种方法? (如果合理可能的话,我更喜欢直接使用JQuery而不是JQuery,但是如果它能使这更容易,我可以使用JQuery)
如果是这样的话?
我的PHP方法如下:
function getPicArrayJson(){
global $fileArrayString;
If (!empty($fileArrayString)){
echo json_encode($fileArrayString);
}
}
到目前为止我的JavaScript:
function getPHPArray(){
var xmlhttp;
if (window.XMLHttpRequest){
xmlhttp=new XMLHttpRequest();
}
else {// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.open("POST", "phpFunctions.php?name=getPicArrayJson", true);
xmlhttp.send();
}
答案 0 :(得分:2)
这基本上是Remote Procedure Call。要与PHP一起使用,请查看JSON-RPC PHP。
无论如何,这是一种基本的方法,您可以在不太复杂的情况下完成应用。您必须向服务器发出ajax请求。这里的想法是使用call_user_func。
call_user_func("getPicArrayJson");
您可以使用
call_user_func($_POST["name"]);
但我强烈建议您只允许调用某些功能
<强> phpFunctions.php 强>
$allowed_functions = array("getPicArrayJson");
$name = $_POST["name"];
function getPicArrayJson() {
$pics = array("1.jpg", "2.jpg");
return json_encode($pics);
}
// legal function
if (in_array($name, $allowed_functions)) {
header("Content-Type: application/json");
$json = call_user_func($name);
die($json);
}
// invalid access
else {
// Error 400
}
然后按正常情况进行Ajax请求
...
xmlhttp.open("POST", "phpFunctions.php?name=getPicArrayJson", true);
xmlhttp.send();
ps 我自己的两分钱,我会使用GET
请求。在RESTful API conventions for web services之后,POST
请求仅用于创建新元素。