我一直在看这个问题已经有一段时间了,似乎无法弄清楚为什么我在调用$ .ajax函数后继续接收null。我输入一个包含我的方法名称的关联数组,然后调用我的方法在PHP中将aj子串返回到前端。当我在我的java脚本中调用alert时,我收到null。这是我的代码
Java脚本:
$(document).ready(function()
{
var data = {};
data["Method"] = "test";
$.ajax({
url:"test.php/test",
data: data,
type:"POST",
contentType:"application/json",
dataType:"json",
success: function(data){
alert(data);
},
error:function(data, textStatus, error)
{
}
});
});
PHP:
<?
//require_once("database.php");
class methods
{
function __contructor()
{
if(isset($_POST["Method"]))
{
$function = $_POST["Method"];
call_user_func($function);
}
else
{
echo "{\"status\":\"false\"}";
}
}
function test()
{
$json = array(
"kyle" => "broflowksi",
"eric" => "cartman",
"stan" => "marsh"
);
echo json_encode($json);
}
}
$method = new methods();
?>
答案 0 :(得分:3)
您要调用的是实例方法。这样称呼:
if(isset($_POST["Method"]))
{
$function = $_POST["Method"];
$method = new ReflectionMethod('methods', $function);
$method->invoke($this);
}
答案 1 :(得分:0)
在发送输出之前尝试强制使用内容类型标头,
header("Content-type: application/json");
答案 2 :(得分:0)
你的类构造函数方法中只有一个拼写错误,它应该是
function __construct()
要记住的另一件事是我不确定你应该将contentType设置为json,因为该变量适用于您发送的内容...而不是您正在接收的内容。 因此,如果您最终遇到删除帖子变量的情况,请尝试从ajax调用中删除contentType。
答案 3 :(得分:-1)
尝试删除echo
方法中的test
。你在打电话
call_user_func($function);
而您的$function
不是returning
而是echoing
,。i.e
function test() {
$json = array(
"kyle" => "broflowksi",
"eric" => "cartman",
"stan" => "marsh"
);
echo json_encode($json); // This line should be returning
}
我之前使用php函数调用处理类似的问题(特别是在ajax中).to catch。