无法通过jQuery ajax发布Javascript数组


Unable to post Javascript array via jQuery ajax

我非常不愿意问这个问题,因为我知道我错过了一些非常愚蠢的东西,但我根本无法解决这个问题。以下代码:

<script>
var formArray = new Array();
formArray['start'] = "one";
formArray['stopat'] = "two";
formArray['stop_at'] = "three";
$('#my_button').click(function() {
    $.ajax({
        type: "POST",
        url: "scheduler.php",
        data: formArray,
        success: function(response){
            console.log(response);
        }
    });
});
</script>

服务器端PHP脚本scheduler.php

<?php
    print_r($_POST);
?>

我返回到控制台的所有日志都是一个空数组:

Array
(
)

如果我在click函数中console.log formArray,它会显示完整的数组。那么,为什么它不把它发布到我的PHP文件中呢?

提前感谢

Array()更改为Object()也可以。

你会得到:

Array
(
    [start] => one
    [stopat] => two
    [stop_at] => three
)

您正在将字符串属性添加到数组中,该数组用于存储数字索引。

改为使用对象:

var formArray = {};
formArray['start'] = "one";
formArray['stopat'] = "two";
formArray['stop_at'] = "three";

jQuery将使用for (var i = 0; i < formArray.length; ++i)循环迭代数组中的索引,这将完全错过您添加到数组中的任何属性。

此外,new Array应该是[](因为{}应该优先于new Object)。不要对内置类型使用new X初始化方法。(Crockford,The Good Parts)

JavaScript数组的设计目的是保存具有整数键的有序项目序列。当jQuery将数据结构转换为Form URL Encoded数据并遇到数组时,它将遍历那些整数键,而不是遍历命名键。

如果希望具有命名键,请使用对象

new Array()更改为newObject()

这样编辑Ajax,看看它是否有效:data: {data: formArray}, dataType: 'JSON'

$.ajax({
        type: "POST",
        url: "scheduler.php",
        data: {data : formArray},
        dataType: 'JSON'
        success: function(response){
            console.log(response);
        }
    });

PHP:

print_r($_POST['data']);