У меня возникает неопределенная проблема с получением данных из моих испытаний 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'));
}
вы не возвращаете идентификатор от контроллера.
@akshithDayan, и он не содержит ничего, кроме успешного вызова ajax.
@AkashKumarVerma, что ты имеешь в виду? можете ли вы указать это в моем коде, спасибо
@MichaelBenGabriel Если он ничего не содержит, это означает, что в вашем контроллере есть проблема.
Вы пытаетесь загрузить что-то?
пытаюсь получить данные из mysql @EmekaOkafor
Почему вы возвращаете представление?
Я хочу показать данные из базы данных @Thomas, я новичок в ajax для laravel, поэтому мне нужна помощь. мой console.info(данные) показывает онлайн {"деятельности":[]}
самый простой способ, которым я могу вам помочь, - это узнать код ошибки ajax, в вашей функции ошибки сделайте что-то вроде этого, console.info(data.status), также выполните console.info(data.responseText), вторая часть будет покажите ошибку вашего контроллера, если она у вас есть.
Для возврата данных json вам не нужно/не следует возвращать представление, а просто вернуть коллекцию, и Laravel преобразует ее для вас. Добавьте также правильные заголовки для jquery.
Почему вы возвращаете представление из действия вашего контроллера? Кроме того, почему вы пытаетесь получить доступ к data.id в своем обработчике успеха AJAX, когда ваше действие, вероятно, вернет массив результатов?






У вас есть опечатка в orderby в вашем контроллере:
$activities = Activity::orderBy('id','asc')->get();
И ajax не возвращает вид, попробуйте:
return compact('activities');
Также данные из ответа представляют собой массив действий, и вы не можете взять идентификатор массива. Попробуйте data[0].id например.
даже если я изменю его на порядокОт @sergey ничего не изменится
Понимаю. console.info() показывает только {"деятельности":[]}
Хм, кажется, ваша таблица действий пуста
Я бы предложил вернуть json; вернуться response()->json(['activities => $activities]);
orderby и orderBy должны работать, поскольку PHP нечувствителен к регистру. Даже oRdeRbY должно работать :)
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]
проверьте мой комментарий выше и вернитесь, пожалуйста
так как вы добавляете data.id, используйте мой второй подход к контроллеру, это тот, который не отображает представление
также вы используете get(), он возвращает коллекцию, вам нужно будет перебрать ее или изменить вызов этой $activities = Activity::orderBy('id','asc')->first();
да, я использую ваш второй подход. сделано с данными, статусом и текстом ответа. он выводит неопределенное
похоже, что у вашего URL есть проблемы, пожалуйста, что насчет кода состояния, определенно у него должен быть код
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 здесь данные консоли в порядке, я не знаю, что не так
Можете ли вы попробовать регистрировать только данные? Поскольку ctivity::orderBy('id','asc')->get() может возвращать коллекцию здесь, лучше регистрировать данные, чем делать что-то вроде успеха ниже: function(data) { $.each(data, function() { $('#test').append ('Добавить' + data.id);}); }
можете ли вы сделать только console.info(data) и найти вас, если вы пытаетесь получить доступ к нулевому значению из базы данных
используя console.info(data), он не возвращает null, он показывает данные в массиве, но при использовании data.object он не определен @EmekaOkafor
тогда ошибка - это ваш javascript, в возвращаемом массиве нет такой вещи, как id, пожалуйста, покажите данные возвращаемого массива
из вашего массива, сделайте что-нибудь вроде data[0].id
Проблема в том, что вы отправляете представление (файл 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
Добавление каждого в данные
уже добавить, но это не работает $.each(data, function(key, value) { console.info(data); $('#test').append('Add' + value.ActivityName); });
Добавить undefined - это вывод
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? }, });
console.info(data) не показывает undefined, он показывает данные в массиве. моя проблема в том, что когда я вызываю конкретное поле, такое как data.id, data.ActivityName, оно показывает sundefined
$.each(данные, функция(ключ, значение) { console.info(value.id); }) @MichaelBenGabriel
это моя проблема $.each(data, function(key, value) { $('#test').append('Add' + value.id); }) -- эта строка кода возвращает undefined
Пожалуйста, поделитесь выводом следующего $.each(data, function(key, value) { console.info(key); console.info(value); })
см. мой вопрос выше. Изображение console.info(value.id); console.info(значение); console.info(ключ);
выходное значение.id не определено, значение - это фактические данные, ключ выводит только $данные
со всеми этими хлопотами использование $.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}));
}
})
},
});
});
попробуйте
console.info(data)и посмотрите, содержит ли он какие-либо данные