无法通过jQuery ajax发布Javascript数组

时间:2013-12-06 12:47:46

标签: javascript php 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文件中呢?

提前致谢

4 个答案:

答案 0 :(得分:2)

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

你会得到:

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

答案 1 :(得分:1)

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

改为使用对象:

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)

答案 2 :(得分:1)

JavaScript数组用于保存带有整数键的有序序列。当jQuery将数据结构转换为表单URL编码数据并遇到数组时,它将迭代这些整数键而不是命名键。

如果您想要命名密钥,请使用对象。

new Array()更改为newObject()

答案 3 :(得分:0)

像这样编辑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']);