我非常不愿意提出这个问题,因为我知道这是一个非常愚蠢的东西,但我根本无法让它发挥作用。代码如下:
<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文件中呢?
提前致谢
答案 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']);