Laravel 5.5 获取jQuery Ajax 后台post数据失败的问题

1 篇文章 0 订阅

今天使用jQuery 的Ajax函数进行异步的post数据提交,后台使用Laravel 5.5无法正常获取到数据

Ajax 部分代码:

var submit_data = {name : 'logo', age : '25'};

$.ajax({
                url : "..", //(实际的path)
                type : "post",
                dataType : "json",
                data : submit_data,
                success : function(data){
                        console.log(data);
                    
                },
                cache : false,
            });

Laravel controller 里面获取:

public function command(Request $request){

    $input = $request->input();//获取输入的数据

    dd($input);

}

使用Chrome浏览器,按F12 -> Network 找到相应的回复文件,点击查看,在preview里面看到并没有数据,是[ ]状态。

解决:

接着上面的步骤,查看该回复文件的Headers部分,找到Request Headers, 找到Content-Type ,

Content-Type: application/x-www-modules-urlencoded; charset=UTF-8

我的jQuery版本是3.1.0, 其Ajax默认的ContentType是application/json, 而使用PHP的话无法通过$_REQUEST、$_POST等全局变量获取post的数据,有两个解决办法:

1. 修改jQuery 的Ajax对象的contentType属性,在$.ajax({ })里面加上:

 

contentType : "application/x-www-form-urlencoded; charset=UTF-8",

 

2.使用PHP获取原本的post数据:

在PHP 7以前的版本,使用$GLOBALS['HTTP_RAW_POST_DATA'], PHP 7以后的版本使用php://input 

PHP 7 :

$rawInput = file_get_contents("php://input");//获取post的字符串


$input = json_decode($rawInput);


dd($input);

由于post的数据必须是字符串,在jQuery Ajax 里面确保数据是字符串,可把json格式序列号, 在$.ajax({ }) 里面修改data属性:

data : JSON.stringify(submit_data),

关于Content-Type 的更多知识可参考这篇博文

文中如有疏漏之处,敬请指正,谢谢!

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值