我已经尝试了一些不同的json方法(stringify,toJSON,可能还有一些完全不相干的其他人出于绝望),但似乎无法弄清楚如何对此进行字符串化以便我可以将其传递给PHP脚本。我能够创建一个二维数组,可以表示如下:
array(
'image'=>array(
0=>'hello.jpeg',
1=>'goodbye.jpeg',
2=>'etc.jpeg'),
'resume'=>array(
0=>'resume.doc'),
'reel'=>array(
0=>'reel.mov')
)
当我使用此dump函数将其打印到控制台时,数组看起来没问题。我试图弄清楚如何让它与对象一起工作,因为我以为我读过的东西说的对象已经是JSON友好的,但是由于我不是非常熟悉javascript,我几乎挣扎着。
编辑:更多细节...我的数组的声明(当我工作时)是这样的,虽然我可能搞砸了:
var fileArray = [];
fileArray['image'] = [];
fileArray['resume'] = [];
fileArray['reel'] = [];
var type;
var name;
var divs = $("#upload-container").children('div');
$.each(divs, function() {
type = $(this).attr('id');
name = $(this).html();
fileArray[type].push(name);
});
答案 0 :(得分:1)
该数组结构的对象在JavaScript中可能如下所示:
var objects =
[
{
'image': [
{ '0': 'hello.jpeg' },
{ '1': 'goodbye.jpeg' },
{ '2': 'etc.jpeg' }
]
},
{
'resume': [
{ '0': 'resume.doc' }
]
},
{
'reel': [
{ '0': 'reel.mov' }
]
}
]
所以现在你有了一个包含三个对象的数组,每个对象都包含一个属性(图像,简历,卷轴),它是另一个对象数组,基本上是键:值对('0':'hello.jpeg'
)。也许你可以通过不打扰使用索引来简化它:
var objects =
[
{
'image': [ 'hello.jpeg', 'goodbye.jpeg', 'etc.jpeg' ]
},
{
'resume': [ 'resume.doc' ],
},
{
'reel': [ 'reel.mov' ]
}
]
然后您可以使用JSON.stringify(objects)
传递给您的PHP操作。
答案 1 :(得分:0)
PHP端的样本预期输出具有包含数字数组的关联数组。 JavaScript数组具有数字索引:如果您希望字符串作为键使用普通对象而不是数组,因为JavaScript对象的行为类似于您从PHP中考虑的关联数组。相应的JavaScript对象应如下所示:
var fileArray = {
'image' : [ 'hello.jpeg',
'goodbye.jpeg',
'etc.jpeg'],
'resume' : [ 'resume.doc' ],
'reel' : [ 'reel.mov' ]
};
在使用方括号定义的数组中,隐含了数字索引。请注意fileArray
定义为花括号而不是方括号,因此不是数组(尽管它的名称)。如果要一次设置一个属性,这仍然允许您使用fileArray['image'] = ...
语法:
var fileArray = {}; // an object, not an array
fileArray['image'] = [];
fileArray['resume'] = [];
fileArray['reel'] = [];
请注意,初始声明中的花括号使其成为对象,但仍使用方括号语法访问属性。
您将fileArray
定义为带方括号的JavaScript数组的方式仍允许您添加基于字符串的键属性,因为数组是对象,但 JSON stringify例程可能忽略这些属性,只序列化数字索引属性。