为什么我的数组参数不在POST请求中?

时间:2019-03-22 07:21:46

标签: 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 个答案:

答案 0 :(得分:2)

与PHP相比,

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);
}

其余代码应按原样工作