我在从laravel和ajax试验中获取数据时遇到了未定义的问题。
这是我的ajax
var data = $(this).serialize();
$.ajax({
url: "{{ route('ajaxdata.getactivities') }}",
type: "GET",
datatType: 'json',
data: data,
cache: false,
processData: false,
error: function (data) {
console.log('AJAX call Failed');
},
success: function (data) {
console.log('AJAX call success');
$('#test').append('Add' + data.id); //data.id is showing undefined. if it is only data it doesnt show anything but AJAX call success
},
});
这是我的路线
Route::get('ajaxdata/getactivities', 'AjaxdataController@getactivities')
->name('ajaxdata.getactivities');
下面是我的控制器函数
function getactivities()
{
$activities = Activity::orderby('id', 'asc')->get();
return view('student.ajaxdata', compact('activities'));
}
发布于 2019-04-15 15:38:16
让我们重写整个内容
var data = $(this).serialize();
$.ajax({
url: "{{ route('ajaxdata.getactivities') }}",//if this page
// does not end with something.blade.php, it will not render your url, i.e if you have seperate .js file, consider rewriting this line, probably like so
// $url=$(this).attr('action');
type:"GET",
datatType : 'json',
data: data,
error: function (data)
{
console.log('AJAX call Failed');
},
success: function(data)
{
console.log('AJAX call success');
$('#test').append('Add' + data.id); //data.id is showing undefined. if it `is only data it doesnt show anything but AJAX call success`
},
})
看起来你想要返回视图,你需要像这样呈现它
function getactivities()
{
$activities = Activity::orderBy('id','asc')->get();
$data=view('student.ajaxdata', compact('activities'))->render();
return response()->json(['html'=>$data]);
}
并在ajax成功中访问它,如下所示
console.log(data.success)// this will return the page with the value and not the values alone.
但是如果你不想返回这个页面,那么可以这样解决
function getactivities()
{
$activities = Activity::orderBy('id','asc')->get();
//return view('student.ajaxdata', compact('activities'));
return response()->json(['$data'=>$activities]);
//remember the data returned here is a collection since you are using a `get() method, you cannot do data.id in your ajax without iterating over it, if you plan to return just a row, then rewrite this line`
$activities = Activity::orderBy('id','asc')->first();
}
在ajax success中以同样的方式访问它。
console.log(data)
$data: Array(3)
0:
ActionDescription: ""
ActivityDate: "0000-00-00"
ActivityID: "1"
ActivityName: "Training"
ActivityTime: "00:00:00"
ActivityTypeID: ""
Location: "Moa"
QRCode: ""
created_at: null
event_id: 1
id: 1
updated_at: null
__proto__: Object
1: {id: 3, ActivityName: "Bruno", Location: "NY", ActionDescription: "A", ActivityDate: "0000-00-00", …}
2:
ActionDescription: "Training"
ActivityDate: "0000-00-00"
ActivityID: null
ActivityName: "Bad Blood"
ActivityTime: "12:00:00"
ActivityTypeID: null
Location: "SM Trinoma"
QRCode: null
created_at: "2019-04-11 05:38:30"
event_id: 2
id: 2
updated_at: "2019-04-11 05:38:30"
__proto
发布于 2019-04-15 15:07:55
你的控制器中的orderby
有打字错误:
$activities = Activity::orderBy('id','asc')->get();
而ajax没有返回视图,请尝试:
return compact('activities');
另外,来自响应的数据是活动的数组,您不能获取数组的id。例如,尝试使用data[0].id
。
发布于 2019-04-15 16:11:58
你能试着只记录数据吗?
因为Activity::orderBy('id','asc')->get()
可能会在这里返回集合,所以日志数据会更好,而不是像下面这样成功:
`success: function (data) {
{
$.each(data, function()
{
console.log(data); //shows the data in array
$('#test').append('Add' + data.id); });
}
}`
https://stackoverflow.com/questions/55683935
复制相似问题