当前位置: 首页 > 面试题库 >

在AJAX上发送嵌套的FormData

颜云瀚
2023-03-14
问题内容

我需要使用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编码表单数据没有任何本机方式来表示复杂的数据结构。它仅支持简单的键=值对。

?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的盛行,当您将JavaScript对象传递给时,jQuery会采用该语法生成​​表单数据data

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

您看到的效果是因为您试图将一个对象(我想是一个FormData实例,但是您没有显示代码的那一部分)作为第二个参数append-需要字符串。

您需要自己使用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");


 类似资料:
  • 问题内容: 要将注册数据发送到服务器,我使用的JSON格式如下: 这是发送方式。 但不幸的是,我收到此错误: 问题答案: 您的要求很好。由于服务器使用无效的JSON对象进行响应,因此将返回错误。 看看发回了什么。

  • 问题内容: 由于IE10已安装在我的Windows 7机器上,因此无法登录到我的应用程序… IE9可以,但FF和Chrome仍然可以。 问题在于,在执行ajax请求(POST或GET)时,IE不会发送会话cookie(jsession id)。 我明确指出我不是跨域的。我使用Jasig / CAS进行身份验证,CAS cookie或会话cookie均由ajax请求发送。Ajax请求通过JQuery

  • 你好,我想在嵌套表中创建一个触发器,以验证在输入作者时,这不是18岁以下。 但是当我创建触发器时,sql开发人员说 错误(4,9): PL/SQL:语句忽略错误(4,110): PLS-00302:组件'NACIMIENTO'必须声明错误(6,9): PL/SQL:语句忽略错误(6,40): PLS-00302:组件'NACIMIENTO'必须声明 插入的数据是:

  • 问题内容: 我正在尝试使用HTTPie进行分析以发送一些嵌套的JSON对象,但我找不到方法。很清楚如何发送JSON对象,而不发送嵌套对象,例如 {“ user”:{“ name”:“ john”“ age”:10}} 问题答案: 您可以通过传递整个JSON: 或者使用以下命令将原始JSON指定为值:

  • 我正在使用ASP。NET Web API:http://xyzdomain.com:16845/api/returns/returns 如何使用PostmanChrome扩展向终结点发送POST请求,给定是一个集合:

  • 当按下按钮删除对象子列表中的一个元素时,我试图使用ajax重新命名包含在另一个对象列表中的对象列表的容器。但是我找不到子列表对象的父容器。 java对象表示为这样的 IE 现在,我尝试将一个delete按钮与每个停止(第二个嵌套对象列表)关联起来,并使用f:ajax render重新渲染这些停止的容器。 即 现在我已经尝试了渲染id的几种不同排列,但是我不明白为什么我不能在小组上执行ajax请求。