Получение неопределенных в AJAX и LARAVEL - PullRequest
0 голосов
/ 15 апреля 2019

У меня возникла неопределенная проблема с получением данных из моих испытаний laravel и 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'));
}

Ответы [ 5 ]

1 голос
/ 16 апреля 2019

со всеми трудностями использования $ .each не работает для зацикливания данных, поэтому я использую для вывода данных.Вот мой рабочий код

$(document).ready(function() {
    var data = $(this).serialize(); 
    $.ajax({ url: "{{ route('ajaxdata.getactivities') }}", 
    method: "get",
    dataType:"JSON", 
    data: data, 
    // cache: false, 
    // processData: false, 
    success: function (data) 
    { 
        $.each(data,function(key,value) { 

            for(var x=0; x < value.length; x++){
            console.log(value[x].ActivityName);

            $('#activities').append($('<option>', {value:value[x].id, text:value[x].ActivityName}));
           }
        })
      }, 
   });
});
1 голос
/ 15 апреля 2019

Можете ли вы попробовать записать только данные?

Поскольку Activity::orderBy('id','asc')->get() может возвращать коллекцию здесь, так что лучше регистрируйте данные, чем делайте что-то вроде ниже success:

`success: function (data) {
    { 
        $.each(data, function() 
        { 
            console.log(data);  //shows the data in array 
            $('#test').append('Add' + data.id); }); 
        }
    }`
1 голос
/ 15 апреля 2019

enter image description here Давайте перепишем весь материал

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 голос
/ 15 апреля 2019

У вас есть опечатка в orderby в вашем контроллере:

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

А ajax не возвращает представление, попробуйте:

return compact('activities');

Также данные из ответа являются массивом действий, и вы не можете использовать идентификатор массива. Попробуйте data[0].id например.

0 голосов
/ 15 апреля 2019

Проблема в том, что вы отправляете представление (файл Blade), а не данные. отправьте данные в формате json, чтобы вам было легко получить доступ к данным в javascript. Почему вы не используете return response()->json(['status'=>200,'payload'=>$ourdata]); А также orderby как orderBy

Как показано ниже

$activities = Activity::orderBy('id','asc')->get(); return response()->json(['status'=>200,'payload'=>$activities]);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...