Thinkphp无法获得AJAX post的数据,很简单的问题就是无法解决?
thinkphp 5.0.7 ,view里使用ajax提交post数据,数据提交后,无法通过tp打印出来。
研究了好久,实在搞不清是什么地方出问题了。
一个很简单的测试代码,
前端:
<html>
<head>
<title>title</title>
<script src="http://libs.baidu.com/jquery/1.9.0/jquery.min.js"></script>
<script>
$(function(){
$("#btn").click(function(){
$.ajax({
url:"/Home/test/index",
type: "POST",
dataType:"",
data:{id:3},
//async: false,
success:function(data){
alert(data.id);
}
});
});
});
</script>
</head>
<body>
<input type="button" id="btn" value="button">
</body>
</html>
服务器端:
class Test extends Controller {
public function index()
{
$dd['id'] = $_POST['id'];
$dd['value'] = 'fff';
print_r(json_encode($dd));
return $this->fetch();
}
最后,页面输出内容是:
{"id":null,"value":"fff"}
这里,前台的id的值,也就是$_POST['id'] 始终是null,
而且前台alert(data.id); 出来的内容也是undefined。
network里面的内容,可以看到post的数据和post成功,但是在前端alert和后台都获取不到post的数据
是什么地方出问题了呢。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
今天又研究了一天,基本解决了。
问题主要是出在
print_r(json_encode($dd));
这条语句中的json_encode()上。在PHP环境中,使用json_encode()完全没有问题,但是在thinkphp环境下,使用json_encode()就会导致ajax post失败,
在thinkphp中,要禁止使用json_encode(),而需要换成
$this->ajaxReturn($array);
这样就可以在控制器中post成功,
虽然具体原因不清楚,但是确实这样调试成功了。