我有这个控制器:
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.name
,res.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);
显示未定义。
答案 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);
}
(相同的功能,更适合框架)