【问题标题】:Returning JSON response from controller in laravel从 laravel 中的控制器返回 JSON 响应
【发布时间】:2017-01-28 05:39:36
【问题描述】:

我是 Javascript 新手。我想在我的表单中进行 ajax 更新。一切正常。一旦更新完成,数据库中的值就会更新。出现问题的地方是当我尝试在视图中更新它时。这是我的控制器

public function updatePost(Request $request)
{

    $post = $request->all();
    $val = \Validator::make($request->all(), [

            'client_id' => 'required',
            'client_name' => 'required',
            'client_business' => 'required',
            'client_ref' => 'required',
            'gmail_mail' => 'required',
            'gmail_pass' => 'required',
            'client_dob' => 'required',
            'client_addr' => 'required',
            'client_no1' => 'required',
            'client_ref' => 'required',
            'domain_name' => 'required',
            'domain_p_date' => 'required',
            'domain_reg' => 'required',
            'domain_ex_date' => 'required',
            'domain_acc_email' => 'required',
            'domain_acc_pass' =>  'required',
            'domain_id' => 'required',

        ]);

            if ($val->fails()) {

            return redirect()->back()->withErrors($val->errors());
        }


             else {

                $data = array(

                'client_id' => $post['client_id'],
                'client_name' => $post['client_name'],
                'client_business' => $post['client_business'],
                'client_ref' => $post['client_ref'],
                'gmail_mail' =>  $post['gmail_mail'],
                'gmail_pass'=> $post['gmail_pass'],
                'client_dob'=> $post['client_dob'],
                'client_addr'=> $post['client_addr'],
                'client_no1'=> $post['client_no1'],

                'domain_name' => $post['domain_name'],
                'domain_p_date' => $post['domain_p_date'],

                'domain_reg' => $post['domain_reg'],
                'domain_ex_date' => $post['domain_ex_date'],
                'domain_acc_email' => $post['domain_acc_email'],
                'domain_acc_pass' => $post['domain_acc_pass'],
                'domain_id' => $post['domain_id'],

                );

            //var_dump($data);

           $update_data = domain_details::where('domain_id', $post['domain_id'])
           ->update($data);

                if ($update_data) {

                    $new_data = domain_details::where('domain_id',$post['domain_id'])->get();

                    return response()->json( ['client_id'=> 'johncena'],200);
                }
                else
                {

                    return redirect()->back()->withErrors($val->errors());
                }



        }

这是我从表单接收并更新的数据。数据库上的更新工作正常。这就是问题发生的地方

if ($update_data) {

$new_data = domain_details::where('domain_id',$post['domain_id'])->get();

return response()->json( ['client_id'=> $new_data->client_id],200);

json( ['client_id'=> $new_data->client_id],200); 如果我只传递一个字符串,它就像 json( ['client_id'=> 'John Doe'],200);

另一个问题是当我看到控制台时。如果我尝试在不更改任何内容的情况下更新表单,则会引发 500 内部服务器错误。这是我处理来自控制器的响应的 Javascript 代码。有时字符串更改为 John Doe,大多数时候我得到 500 内部服务器错误。

$('#update-modal').on('click',function(){

$.ajax({

    type : "get",
    url : updateURL,
    data : { client_id : $('#client_id').val(),
             client_name : $('#client_name').val(),
             client_business : $('#client_business').val(),
             client_ref : $('#client_ref').val(),
             gmail_mail : $('#gmail_mail').val(),
             gmail_pass : $('#gmail_pass').val(),
             client_dob : $('#client_dob').val(),
             client_addr : $('#client_addr').val(),
             client_no1 : $('#client_no1').val(),

             domain_name : $('#domain_name').val(),
             domain_p_date : $('#domain_p_date').val(),
             domain_reg : $('#domain_reg').val(),
             domain_ex_date : $('#domain_ex_date').val(),
             domain_acc_email : $('#domain_acc_email').val(),
             domain_acc_pass :  $('#domain_acc_pass').val(),
             domain_id : domain_id,
             _token : token 
         }

})
.done(function(msg){
    $(client_id_element).text(msg['client_id']);



});
});

我知道我错过了一些东西。我不知道它是什么。在此先感谢

【问题讨论】:

    标签: javascript json ajax laravel


    【解决方案1】:

    嗯,我认为 Eloquent get() 返回一个集合,而不是某个对象。看起来您只想返回一个带有 domain_id 的唯一对象。尝试使用

    $new_data = domain_details::where('domain_id',$post['domain_id'])->first();
    

    改为。

    【讨论】:

    • 它就像一个魅力,我以为我在使用 JSON 数据时犯了一些错误。和语法
    • 请记住,当您使用 get() 时,访问查询结果的正确方法是在整个集合上使用循环并处理每个对象或使用像 $new_data[0]->client_id 这样的索引表示法,这不好.如果您确定您尝试从数据库中获取的对象具有独特的属性,例如id,您可以简单地使用first() 仅获取一项。我很高兴它起作用了:)
    猜你喜欢
    • 1970-01-01
    • 2013-09-20
    • 2017-10-19
    • 2021-03-08
    • 1970-01-01
    • 2014-08-24
    • 2018-10-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多