从jquery

时间:2016-08-08 10:10:04

标签: php jquery laravel laravel-5

我有这个控制器:

public function show(Request $request)
{
    if($request->ajax())
    {
        $id=$request->get('id');
        if($id)
        {
            $show=Crud::where('id',$id)->get();
            echo json_encode(array('status' => TRUE,  'show'=>$show)); die;
        }
    }
    echo json_encode(FALSE);die;
}

这个jquery:

$(document).on('click', '.show', function (e) {
    e.preventDefault();
    var id = $(this).data('id');
    $.ajax({
        type: "POST",
        url: "{{url('/crud/show')}}",
        data: {id:id},
        success: function (data) {
        var res = $.parseJSON(data);
        //console.log(res.show);
        if(res.status == true)
           {       
                //console.log(res.show.name);
                var result = 'Name:'+res.show.name+'<br>'+
                             'Phone:'+res.show.phone+'<br>'+
                             'Class:'+res.show.class+'<br>'+
                             'Address:'+res.show.address+'<br>'+
                    $('#result').html(result);  
            }
        }
    });          
});

res.show.nameres.show.address等不提供价值。如果我使用原始SQL查询没有问题。我猜原始sql查询在数组中给出结果,而eloquent方法在对象中给出结果。这有什么不同?我该如何处理? 如果我点击任何节目类,console.log(res.show);会给出这个。

    [Object]0:
    Object
     address: "Maharishi"
     class: 123
     id: 7
     name: "Maharjan"
     phone: "123456789"
   __proto__: Object
     length: 1
    __proto__: Array[0]

console.log(res.show.name);显示未定义。

2 个答案:

答案 0 :(得分:1)

当仅以JSON格式响应时,您可以在ajax选项中设置dataType:'json',无需使用JSON.parse()方法解析它。

$(document).on('click', '.show', function (e) {
    e.preventDefault();
    var id = $(this).data('id');
    $.ajax({
        type: "POST",
        url: "{{url('/crud/show')}}",
        data: {id:id},
        dataType: 'json'
        success: function (res) {
        //console.log(res.show);
        if(res.status == true)
           {       
                //console.log(res.show.name);
                var result = 'Name:'+res.show.name+'<br>'+
                             'Phone:'+res.show.phone+'<br>'+
                             'Class:'+res.show.class+'<br>'+
                             'Address:'+res.show.address+'<br>'+
                    $('#result').html(result);  
            }
        }
    });          
});

根据你在问题中提到的“如果我使用原始sql查询没有问题。我猜原始sql查询将结果提供给数组,而eloquent方法将结果提供给对象。”

为此,我可以知道您的响应的结构来自结果对象吗?

答案 1 :(得分:0)

  

console.log(res.show.name);显示未定义。

console.log(res.show[0].name);怎么样?

您正在调用Crud::where('id',$id)->get();,其中包含具有该ID的所有“Crud”对象的集合。该Collection被序列化为JSON数组。所以,首先得到数组的第一个元素。

甚至更好,因为您可能已经知道设计中只有一个对象具有该ID,Crud::where('id',$id)->first();然后您可以res.show.name

最后,您的控制器可能是这样的:

public function show(Request $request)
{
    $response = ['status' => false];

    if ($request->ajax())
    {
        if ($id = $request->id)
        {
            if ($show = Crud::where('id', $id)->first())
                    // same as Crud::find($id);
            {
                $response = ['status' => true, 'show' => $show];
            }
        }
    }

    return response()->json($response);
}

(相同的功能,更适合框架)