首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在AJAX和LARAVEL中未定义

在AJAX和LARAVEL中未定义
EN

Stack Overflow用户
提问于 2019-04-15 14:58:55
回答 5查看 1.6K关注 0票数 -1

我在从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'));
}
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 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
票数 1
EN

Stack Overflow用户

发布于 2019-04-15 15:07:55

你的控制器中的orderby有打字错误:

$activities = Activity::orderBy('id','asc')->get();

而ajax没有返回视图,请尝试:

return compact('activities');

另外,来自响应的数据是活动的数组,您不能获取数组的id。例如,尝试使用data[0].id

票数 1
EN

Stack Overflow用户

发布于 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); }); 
        }
    }`
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55683935

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档