首页 > 解决方案 > Laravel 在 PHP 控制器中访问 JSON 数据

问题描述

我有这个 AJAX 函数,它将数据发送到路由:

$.ajax({
    url : '/home/update_user_data',
    type : "post",
    contentType: 'application/json;charset=UTF-8',
    data : {'userid' : $('#user-general-i').data('userid'), 'datatype' : datatype, 'newcontent' : newcontent},
    success : function(response) {
        console.log("update_user_data", response);

        if (response['success'] == true) {
            console.log('success');
        } else {

        }
    },
    error : function(xhr) {
        console.log("update_user_data", xhr);
    }
});

在路线中我无法弄清楚如何访问数据,通常我可以使用$data->value,但在这里它不起作用。我假设是因为我不序列化表单。

这是我尝试访问数据的方式:

public function update_user_data(Request $data) {

    try {           
        error_log($data);
        error_log(print_r($data->all(), True));
        error_log($data->query('userid'));
        error_log($data->userid);
        error_log($data->datatype);
        error_log($data->newcontent);  
    } catch (\Exception $e) {  
        return ['success' => false, 'message' => $e->getMessage()];   
    } 

    return ['success' => true, 'message' => 'Konnte Nutzer nicht updaten'];   
}

我在请求中设置了 laravel 文档,并尝试了所有访问数据的方法,但我只是得到一个空字符串,没有错误。

但是error_log($data);显示了请求,我可以看到数据在那里:

userid=4777&datatype=gender&newcontent=1

编辑

我可以得到上面的字符串:

error_log($data->getContent());

但是我不能得到具体的值,我可以使用正则表达式来提取它们或拆分字符串,但这感觉超级hacky和错误。

编辑

我还尝试更改 AJAX 请求:

data : JSON.parse(JSON.stringify(({'userid' : $('#user-general-i').data('userid'), 'datatype' : datatype, 'newcontent' : newcontent})))

我还尝试添加:

dataType: "json"

但遗憾的是什么都没有改变,一切error_log都是空的。

Laravel 版本:Laravel 框架 5.8.27

标签: phpajaxlaravel

解决方案


在您的情况下,$dataRequest对象而不是实际数据。

您首先需要从请求对象中获取数据。

试试下面:

public function update_user_data(Request $request) {
  $data = $request->all();

  // you can now be able to access your data like:
  $data['userid'];
  $data['datatype'];
  $data['newcontent'];
  //...
}

或者在较新版本的 Laravel 中,您可以使用request()全局函数从Request对象中获取数据。

request('userid'); // gives you userid passed via ajax i.e `4777`

更改您的 ajax 请求:

contentType: 'application/json',
data: JSON.stringify( {"userid": $('#user-general-i').data('userid')} ),
// ...

推荐阅读