在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请求者。为什么?
谢谢!
答案 0 :(得分:2)
JavaScript对数组的行为非常严格,因为数组总是被数字索引。
在您的代码中,您拥有:
let todoItem = []
todoItem['modified'] = $("#modified_" + i).val();
这是不允许的,因为您有一个数组,但尝试将其用作对象。这只会在数组对象上创建自定义属性,而实际上不会向基础数组添加任何内容。这在控制台中很明显,其中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);
}
其余代码应按原样工作