0

您好我需要在 JSON 对象中构建数据并通过 ajax 帖子作为字符串发送。

我需要按以下格式发送一些东西:

{
 "myRequest": {
     "myRequestType": "updateStatus",
     "fields": [
         {
             "item1": "data1",
             "item2": "data2",
             "item3": "data3",
             "formUpdateField": "data4"
         }
     ]
 }
}

我有一个表单表,它有一个复选框来选择要发送更新的记录。基本上发送是更新记录的状态。

基于上述,我可以访问 item1、item2 和 item3 数据——这是非表单数据。我需要将此添加到 JSON 对象。我想我可以做到这一点。但我的问题是,我还需要将表单中的数据添加到这个 JSON 对象中。

我能够从表单中获取数据,但是如何将其添加到我正在构建的 JSON 对象中?

另一个问题是,您可以从表单表中选择多条记录

任何想法如何使用 JSON/jQuery 等来做到这一点?

4

2 回答 2

0

您可以尝试使用此问题serializeObject中的函数将表单数据作为对象检索。然后,您可以将非表单数据添加到该对象。

也许类似于以下内容:

var data = $('form').serializeObject();
data.item1 = 'data1';
data.item2 = 'data2';
data.item3 = 'data3';
myJson.myRequest.fields = [data];
于 2012-07-01T20:46:23.217 回答
0

将您的对象构建为对象,然后将其字符串化。自己对 JSON 字符串进行字符串处理比稍后进行字符串化要困难得多。

如果您乐于只支持现代浏览器,您可以利用JSON.stringify()ECMA5 中的本机方法。如果没有,有很多第三方脚本可以做同样的事情。

试试这个:

HTML(简单形式)

<form id='myForm'>
    <input type='text' name='foo' />
    <input type='text' name='bar' />
    <input type='checkbox' name='foobar' />
    <input type='submit' value='go'>
</form>

JS

$(function() {

    //initialise object
    $('#myForm').on('submit', function() {
        var data = {
            myRequest: {
                myRequestType: 'updateStatus',
                fields: [{
                    item1: 'data1',
                    item2: 'data2',
                    item3: 'data3',
                    formUpdatedField: 'date4'
                }]
            }
        };

            //iterate over form fields and add each one in to our data
        $(this).find('input:not([type=submit]), select, textarea').each(function() {
            data.myRequest.fields[0][$(this).attr('name')] = $(this).val();
        });

            //do the request
        $.ajax({url: 'some/url.php', method: 'post', data: JSON.stringify(data)}).done(function() {
            //on success...
        });
        return false;
    });
});

这将迭代地将字段及其值附加到您的对象,然后在将其作为 AJAX 请求的一部分发送时对其进行字符串化。

最后,你的fields定义不能只是一个对象,而不是一个纯粹为了容纳内部对象而存在的数组吗?似乎没有必要,但您的数据结构可能比您展示的更多。

于 2012-07-01T21:03:17.627 回答