从JavaScript调用PHP函数

时间:2014-04-13 05:25:35

标签: javascript php ajax

我有一个按钮点击执行的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();
}

1 个答案:

答案 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请求仅用于创建新元素。