从JavaScript按名称调用PHP函数

从JavaScript按名称调用PHP函数,javascript,php,ajax,Javascript,Php,Ajax,我有一个javascript函数,只需点击一个按钮就可以执行,我有一个包含所有PHP函数的包含文件。其中一个PHP函数返回一个编码为JSON对象的文件名数组。我想从Javascript函数中调用这个函数,以便使用数组。我知道我可以调用一个可以运行的PHP文件,但在本例中,我只想调用一个特定的命名方法 我尝试了以下操作,但无法使其工作(控制台错误:意外

我有一个javascript函数,只需点击一个按钮就可以执行,我有一个包含所有PHP函数的包含文件。其中一个PHP函数返回一个编码为JSON对象的文件名数组。我想从Javascript函数中调用这个函数,以便使用数组。我知道我可以调用一个可以运行的PHP文件,但在本例中,我只想调用一个特定的命名方法

我尝试了以下操作,但无法使其工作(控制台错误:意外<)

函数getPHPArray(){ var picArray; picArray=; } 这可以使用XMLHttpRequest完成,还是需要找到其他方法?(如果可能的话,我更喜欢纯Javascript而不是JQuery,但如果JQuery让这变得更容易,我可以使用它)

如果是,怎么做

我的PHP方法如下:

函数getPicArrayJson(){ 全球$fileArrayString; 如果(!empty($fileArrayString)){ echo json_encode($fileArrayString); } } 到目前为止,我的JavaScript:

函数getPHPArray(){ var-xmlhttp; if(window.XMLHttpRequest){ xmlhttp=新的XMLHttpRequest(); } else{//IE6、IE5的代码 xmlhttp=新的ActiveXObject(“Microsoft.xmlhttp”); } open(“POST”,“phpFunctions.php?name=getPicArrayJson”,true); xmlhttp.send(); } 这本质上是一个问题。如果要与PHP一起使用,我将签出


无论如何,这里有一个基本的方法,你可以做到这一点,没有太多的复杂性,你的应用程序。您必须向服务器发出ajax请求。您在这里的想法是使用

你可以用

call_user_func($_POST["name"]);
但是我强烈建议只允许调用某些函数


phpFunctions.php

$allowed_functions=array(“getPicArrayJson”);
$name=$_POST[“name”];
函数getPicArrayJson(){
$pics=数组(“1.jpg”、“2.jpg”);
返回json_encode($pics);
}
//法律职能
if(在数组中($name,$allowed_函数)){
标题(“内容类型:application/json”);
$json=call\u user\u func($name);
死亡($json);
}
//无效访问
否则{
//错误400
}
那么你会按照正常的方式请求Ajax吗

。。。
open(“POST”,“phpFunctions.php?name=getPicArrayJson”,true);
xmlhttp.send();


ps我自己的两分钱,我会使用
GET
请求。下列的
POST
请求只能用于创建新元素。

您能解释一下误解,以便我可以重新制定我的方法/问题吗?似乎问题的反对者和接近者懒得添加注释。首先,确保您实际调用的php返回有效的JSONRENAME my变量,以便于澄清-是这就是你的意思,或者我应该使用return over echo?为什么对这个答案投反对票?感谢您尝试回答我的问题!这似乎是纯粹的PHP方面,虽然?我的JavaScript调用会是什么样子?我正在尝试这个解决方案-你能解释一下为什么你更喜欢在这个场景中使用POST吗?@db579,我添加了一个关于
GET
vs
POST
的注释,并提供了一个链接供你阅读。我希望这会有所帮助。@naomik放弃
call\u user\u func
如何避免查找的开销,如果在允许的函数数组中,只调用请求的函数?例如
$func=$\u POST[“name”]$func()@melc,不。我想让db579看到
call\u user\u func
提供的灵活性。例如,可以使用
call\u user\u func
调用泛型func、静态方法或实例方法。它有一个很好的伴奏,
call\u user\u func\u array
,我相信他在阅读文档时也会看到它。我相信这两个都比你提议的糟糕透顶。
call_user_func($_POST["name"]);