#javascript #jquery
#javascript #jquery
Вопрос:
В приложении laravel 5.7 / jquery 3 я сохраняю массив данных и терплю неудачу, так как в консоли моего браузера я вижу, что при отправке формы в POST-запросе отправляется только параметр _token:
let todos_count = $("#todos_count").val()
// alert( "saveTodoDialog todos_count::" var_dump(todos_count) " csrf_token::" csrf_token )
let todosList = [];
for (let i = 0; i < todos_count; i ) {
let todoItem = []
todoItem['modified'] = $("#modified_" i).val();
todoItem['todo_text'] = $("#todo_text_" i).val();
todoItem['todo_priority'] = $("#todo_priority_" i).val();
todoItem['todo_completed'] = $("#todo_completed_" i).val();
alert("todoItem::" var_dump(todoItem))
todosList[todosList.length] = todoItem
}
console.log("todosList::")
console.log(todosList)
alert(todosList.length "todosList::" var_dump(todosList))
let href = "/admin/save-todo-page";
$.ajax({
type: "POST",
dataType: "json",
url: href,
data: {"_token": csrf_token, "todosList": todosList},
success: function (response) {
popupAlert("Todo items were saved successfully !", 'success')
},
error: function (error) {
popupErrorMessage(error.responseJSON.message)
}
});
Мой массив todosList заполнен правильно :
но это не POST-запрос. Почему?
Спасибо!
Ответ №1:
JavaScript, в отличие от PHP, имеет очень строгое поведение для массивов, поскольку они всегда проиндексированы числовым методом.
В вашем коде у вас есть:
let todoItem = []
todoItem['modified'] = $("#modified_" i).val();
Это недопустимо, потому что у вас есть массив, но вы пытаетесь использовать его как объект. Это просто создаст пользовательские свойства для объекта array, но фактически ничего не добавит к базовому массиву. Это должно быть очевидно в консоли, где ваш todosList
массив представляет собой массив из 3 массивов длиной 0.
Вы можете заставить это работать, выполнив:
let todosList = [];
for (let i = 0; i < todos_count; i ) {
let todoItem = {
modified: $("#modified_" i).val(),
todo_text: $("#todo_text_" i).val(),
todo_priority: $("#todo_priority_" i).val(),
todo_completed: $("#todo_completed_" i).val()
}; //Object initialiser
todosList.push(todoItem);
}
Остальной код должен работать как есть