加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

在AJAX上发送嵌套的FormData

发布时间:2020-12-16 03:12:32 所属栏目:百科 来源:网络整理
导读:我需要使用ajax和FormData发送一些数据,因为我想发送一个文件和一些其他参数.我通常发送数据的方式是这样的: $.ajax({ type: 'POST',url: 'some_url',dataType: 'json',processData:false,contentType:false,data:{ Lvl_1-1: 'something',Lvl_1-2: 'somethi
我需要使用ajax和FormData发送一些数据,因为我想发送一个文件和一些其他参数.我通常发送数据的方式是这样的:
$.ajax({
    type:       'POST',url:        'some_url',dataType:   'json',processData:false,contentType:false,data:{
        Lvl_1-1: 'something',Lvl_1-2: 'something',Lvl_1-3: {
            Lvl_1-3-1: "something",Lvl_1-3-2: "something",Lvl_1-3-3: "something",},...
});

如果我不使用FormData(),我没有问题,但是当使用FormData()时,只有Lvl1上的数据是可以的,但任何嵌套的东西都显示为字符串,如下所示

<b>array</b> <i>(size=3)</i>
    'Lvl1-1' <font color='#888a85'>=&gt;</font> <small>string</small> 
        <font color='#cc0000'>'Something'</font> 
        <i>(length=23)</i>
    'Lvl1-2' <font color='#888a85'>=&gt;</font> <small>string</small> 
        <font color='#cc0000'>''Something''</font> <i>(length=3)</i>
    'Lvl1-3' <font color='#888a85'>=&gt;</font> <small>string</small> 
        <font color='#cc0000'>'[object Object]'</font> <i>(length=17)</i>

如果我使用FormData()来编码Lvl1-3中的数据,而不是[object Object]我得到[object FormData]

如何在Lvl1-3上获取数组而不是字符串?

注意:如果文件位于顶层(Lvl_1),我可以使用FormData()发送文件没有问题.我没有编写附加文件的代码,因为这不是问题,嵌套数据是.我刚才提到了这个文件,因为这就是我使用FormData()的原因.

URL编码表单数据没有任何本机方式来表达复杂的数据结构.它只支持简单的key = value对.
?foo=1&bar=2

大多数表单数据解析库允许使用具有相同名称的键的数据数组

?foo=1&foo=2

PHP在该格式之上使用了自己的语法:

?foo[]=1&foo[]=2

它允许关联数组中的命名键:

?foo[bar]=1&foo[baz]=2

和嵌套数组:

?foo[bar][level2a]=1&foo[bar][level2b]=2

由于PHP的普及,jQuery在将JavaScript对象传递给数据时采用了生成表单数据的语法.

如果你想使用FormData,那么jQuery不会为你重新处理它.

你看到的效果是因为你试图将一个对象(我猜一个FormData实例,但你没有显示你的代码的一部分)作为第二个追加参数 – 在一个字符串是预期的.

您需要自己使用PHP的语法生成密钥名称.

form_data_instance.append("Lvl_1-3[Lvl_1-3-1]","something");
form_data_instance.append("Lvl_1-3[Lvl_1-3-2]","something");
form_data_instance.append("Lvl_1-3[Lvl_1-3-3]","something");

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读