Получение undefined в AJAX и LARAVEL

У меня возникает неопределенная проблема с получением данных из моих испытаний 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.info('AJAX call Failed');
    },
    success: function (data) {
        console.info('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'));
}

попробуйте console.info(data) и посмотрите, содержит ли он какие-либо данные

akshithMarolie 15.04.2019 08:59

вы не возвращаете идентификатор от контроллера.

Akash Kumar Verma 15.04.2019 09:05

@akshithDayan, и он не содержит ничего, кроме успешного вызова ajax.

Michael Ben Gabriel 15.04.2019 09:13

@AkashKumarVerma, что ты имеешь в виду? можете ли вы указать это в моем коде, спасибо

Michael Ben Gabriel 15.04.2019 09:13

@MichaelBenGabriel Если он ничего не содержит, это означает, что в вашем контроллере есть проблема.

akshithMarolie 15.04.2019 09:14

Вы пытаетесь загрузить что-то?

Emeka Okafor 15.04.2019 09:25

пытаюсь получить данные из mysql @EmekaOkafor

Michael Ben Gabriel 15.04.2019 09:27

Почему вы возвращаете представление?

online Thomas 15.04.2019 09:30

Я хочу показать данные из базы данных @Thomas, я новичок в ajax для laravel, поэтому мне нужна помощь. мой console.info(данные) показывает онлайн {"деятельности":[]}

Michael Ben Gabriel 15.04.2019 09:36

самый простой способ, которым я могу вам помочь, - это узнать код ошибки ajax, в вашей функции ошибки сделайте что-то вроде этого, console.info(data.status), также выполните console.info(data.responseText), вторая часть будет покажите ошибку вашего контроллера, если она у вас есть.

Emeka Okafor 15.04.2019 09:49

Для возврата данных json вам не нужно/не следует возвращать представление, а просто вернуть коллекцию, и Laravel преобразует ее для вас. Добавьте также правильные заголовки для jquery.

online Thomas 15.04.2019 09:52

Почему вы возвращаете представление из действия вашего контроллера? Кроме того, почему вы пытаетесь получить доступ к data.id в своем обработчике успеха AJAX, когда ваше действие, вероятно, вернет массив результатов?

apokryfos 15.04.2019 10:01
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
12
1 718
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

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

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

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

return compact('activities');

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

даже если я изменю его на порядокОт @sergey ничего не изменится

Michael Ben Gabriel 15.04.2019 09:14

Понимаю. console.info() показывает только {"деятельности":[]}

Michael Ben Gabriel 15.04.2019 09:34

Хм, кажется, ваша таблица действий пуста

Sergey Bogdanov 15.04.2019 09:38

Я бы предложил вернуть json; вернуться response()->json(['activities => $activities]);

senty 15.04.2019 09:55
orderby и orderBy должны работать, поскольку PHP нечувствителен к регистру. Даже oRdeRbY должно работать :)
Rwd 15.04.2019 10:02
Ответ принят как подходящий

Давайте перепишем все целиком

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.info('AJAX call Failed');
      },
        success: function(data)
      {
        console.info('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.info(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.

    console.info(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

теперь он отображается в console.info(data), но не отображается в моем приложении $('#test').append('Add' + data.ActivityName); он показывает Add[object object]

Michael Ben Gabriel 15.04.2019 09:46

проверьте мой комментарий выше и вернитесь, пожалуйста

Emeka Okafor 15.04.2019 09:50

так как вы добавляете data.id, используйте мой второй подход к контроллеру, это тот, который не отображает представление

Emeka Okafor 15.04.2019 09:51

также вы используете get(), он возвращает коллекцию, вам нужно будет перебрать ее или изменить вызов этой $activities = Activity::orderBy('id','asc')->first();

Emeka Okafor 15.04.2019 09:52

да, я использую ваш второй подход. сделано с данными, статусом и текстом ответа. он выводит неопределенное

Michael Ben Gabriel 15.04.2019 09:55

похоже, что у вашего URL есть проблемы, пожалуйста, что насчет кода состояния, определенно у него должен быть код

Emeka Okafor 15.04.2019 09:57

undefined ajaxdata:202 {$data: {…}}$data: ActionDescription: ""ActivityDate: "0000-00-00"ActivityID: "1"ActivityName:"Обучение"ActivityTime:"00:00:00"ActivityTypeID: " "Местоположение: "Моа" QRCode: ""created_at: nullevent_id: 1id: 1updated_at: null__proto__: Object__proto__: Object ajaxdata: 203 undefined ajaxdata: 204 undefined здесь данные консоли в порядке, я не знаю, что не так

Michael Ben Gabriel 15.04.2019 09:59

Можете ли вы попробовать регистрировать только данные? Поскольку ctivity::orderBy('id','asc')->get() может возвращать коллекцию здесь, лучше регистрировать данные, чем делать что-то вроде успеха ниже: function(data) { $.each(data, function() { $('#test').append ('Добавить' + data.id);}); }

svikramjeet 15.04.2019 10:05

можете ли вы сделать только console.info(data) и найти вас, если вы пытаетесь получить доступ к нулевому значению из базы данных

Emeka Okafor 15.04.2019 10:05

используя console.info(data), он не возвращает null, он показывает данные в массиве, но при использовании data.object он не определен @EmekaOkafor

Michael Ben Gabriel 15.04.2019 10:37

тогда ошибка - это ваш javascript, в возвращаемом массиве нет такой вещи, как id, пожалуйста, покажите данные возвращаемого массива

Emeka Okafor 15.04.2019 10:44

из вашего массива, сделайте что-нибудь вроде data[0].id

Emeka Okafor 15.04.2019 11:47

Проблема в том, что вы отправляете представление (файл 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]);

Вы можете попробовать регистрировать только данные?

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

`success: function (data) {
    { 
        $.each(data, function() 
        { 
            console.info(data);  //shows the data in array 
            $('#test').append('Add' + data.id); }); 
        }
    }`

он работает, если я делаю data[0].id, показывает только 1 данные, но без него он не определен и не показывает все данные @svikramjeet

Michael Ben Gabriel 15.04.2019 10:55

Добавление каждого в данные

svikramjeet 15.04.2019 11:01

уже добавить, но это не работает $.each(data, function(key, value) { console.info(data); $('#test').append('Add' + value.ActivityName); });

Michael Ben Gabriel 15.04.2019 11:03

Добавить undefined - это вывод

Michael Ben Gabriel 15.04.2019 11:05

var data = $(this).serialize(); $.ajax({ url: "{{ route('ajaxdata.getactivities') }}", type: "GET", datatType: 'json', data: data, cache: false, processData: false, Success: function ( data) { console.info(data); // здесь все еще отображается undefined? }, });

svikramjeet 15.04.2019 11:09

console.info(data) не показывает undefined, он показывает данные в массиве. моя проблема в том, что когда я вызываю конкретное поле, такое как data.id, data.ActivityName, оно показывает sundefined

Michael Ben Gabriel 15.04.2019 11:18

$.each(данные, функция(ключ, значение) { console.info(value.id); }) @MichaelBenGabriel

svikramjeet 15.04.2019 11:20

это моя проблема $.each(data, function(key, value) { $('#test').append('Add' + value.id); }) -- эта строка кода возвращает undefined

Michael Ben Gabriel 15.04.2019 11:22

Пожалуйста, поделитесь выводом следующего $.each(data, function(key, value) { console.info(key); console.info(value); })

svikramjeet 15.04.2019 11:25

см. мой вопрос выше. Изображение console.info(value.id); console.info(значение); console.info(ключ);

Michael Ben Gabriel 15.04.2019 11:30

выходное значение.id не определено, значение - это фактические данные, ключ выводит только $данные

Michael Ben Gabriel 15.04.2019 11:32

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

$(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.info(value[x].ActivityName);

            $('#activities').append($('<option>', {value:value[x].id, text:value[x].ActivityName}));
           }
        })
      }, 
   });
});

Другие вопросы по теме