无法通过jQuery ajax发布Javascript数组

我非常不愿意提出这个问题,因为我知道这是一个非常愚蠢的东西,我不知道,但我根本不能 让这个工作。 代码如下:</ p>

 &lt; script&gt; 

var formArray = new Array();
formArray ['start'] =“one”;
formArray ['stopat' ] =“two”;
formArray ['stop_at'] =“三”;

$('#my_button')。click(function(){
$ .ajax({
type:“POST” ,
url:“scheduler.php”,
data:formArray,
success:function(response){

console.log(response);

}
});
} );
&lt; / script&gt;
</ code> </ pre>

服务器端PHP脚本 scheduler.php </ code> </ p>

  &lt;?php 

print_r($ _ POST);

?&gt;
</ code> </ pre>

我回到登录控制台的所有内容都是 一个空数组:</ p>

  Array 


</ code> </ pre>

如果我是console.log 单击函数中的formArray </ code>它显示完整的数组就好了。 那么为什么不将它发布到我的PHP文件中呢?</ p>

提前致谢</ p>
</ div>

展开原文

原文

I am extremely reluctant to ask this question as I know it is something really stupid I am missing, but I simply cannot get this to work. Code below:

<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>

Server side PHP Script scheduler.php

<?php

    print_r($_POST);

?>

All I get back logged to the console is an empty array:

Array
(
)

If I console.log formArray within the click function it shows the complete array just fine. So why is it not posting it to my PHP file?

Thanks in advance

dongyan1808
dongyan1808 如果使用Firebug,Chrome开发人员工具等,您可以单击网络/网络选项卡并查看标题和响应,这些可以帮助您查看问题所在的一侧。
接近 7 年之前 回复
donglvhe7591
donglvhe7591 我做了一个控制台日志作为点击功能的第一行,它打印数组就好了。它显示[start:“one”,stopat:“two”,stop_at:“three”]
接近 7 年之前 回复

4个回答



Array()</ code>更改为 Object()</ code>也可以。< / p>

你会得到:</ p>

  Array 

[start] =&gt; one
[stopat] =&gt; 2

[stop_at] =&gt;三

</ code> </ pre>
</ div>

展开原文

原文

Changing Array() to Object() would work as well.

You would get:

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

douduan1953
douduan1953 而不是新的Object,应该是{}。 此外,数组是数组,它们的索引是数字。 当他们序列化为JSON时,他们的索引会被迭代,而不是他们的属性。
接近 7 年之前 回复
douna6802
douna6802 我认为这是因为Object创建了一个json。
接近 7 年之前 回复
duanruinong0619
duanruinong0619 我们有一个胜利者......新的Object()而不是新的Array()已经解决了这个问题。 服务器现在返回已发布的数组。 任何人都可以建议使用数组而不是对象究竟是什么问题?
接近 7 年之前 回复



您正在将字符串属性</ strong>添加到数组中,该数组用于存储数字索引。</ p> \ n

改为使用对象:</ p>

  var formArray = {}; 
formArray ['start'] =“one”;
formArray ['stopat'] =“two”;
formArray ['stop_at'] =“三”;
</ code> </ pre>

jQuery将使用 for迭代数组中的索引 (var i = 0; i&lt; formArray.length; ++ i)</ code>循环,它将完全遗漏您添加到数组中的任何属性。</ p>

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

展开原文

原文

You are adding string properties to an array, which is for storing numeric indices.

Use an object instead:

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

jQuery will iterate over the indices in an array, using a for (var i = 0; i < formArray.length; ++i) loop, which will completely miss any properties you've added to the array.

Also, new Array should have been [] (as {} should be preferred over new Object). Don't use the new X method of initialization for built-in types. (Crockford, The Good Parts)

doukuo9116
doukuo9116 啊......谢谢你的解释。 这很有道理。 我已经接受了关于使用对象的其他答案,但我真的很感激这个解释。
接近 7 年之前 回复



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

如果您想要使用对象 已命名键</ strong>。</ p>

new Array()</ code>更改为 newObject()</ code> </ p>
</ DIV>

展开原文

原文

JavaScript Arrays are designed to hold an ordered sequence of items with integer keys. When jQuery converts a data structure into Form URL Encoded data and encounters an array, it will iterate over those integer keys and not over named keys.

Use an Object if you want to have named keys.

Change new Array() to newObject()



像这样编辑Ajax并查看它是否有效: data:{data:formArray},dataType:'JSON'< /code>


nn
$.ajax({
type:“POST”,
url:“scheduler.php”,
data:{data:formArray},

dataType:'JSON'
success:function(response){

console.log(response);

}
});
</ code> </ pre>
\ n

PHP:</ p>

  print_r($ _ POST ['data']); 
</ code> </ pre>
</ div>

展开原文

原文

Edit your Ajax like this and see if it works: 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']);

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问