生成动态 JSON 对象
Generating a dynamic JSON object
(我希望我能正确地解释这个问题...有一种感觉,我可能会被钉在十字架上...
我有一个动态生成的 HTML 表单,里面填充了选择列表,然后使用 AJAX 保存到数据库中。
选择列表的名称如下:
<select id="slFieldName1"><option value="A">A</option><option value="B">B</option></select>
<select id="slFieldName2"><option value="A">A</option><option value="B">B</option></select>
等。
FieldName1
、FieldName2
等是数据库表上的实际列名 - 我正在使用反射来获取和设置值。
以下是过程:
客户端:
$('#btnSave').click(function (e) {
var sData = {
FieldName1: $('#slFieldName1').val(),
FieldName2: $('#slFieldName2').val()
};
ProjectName.AJAXService.Save(JSON.stringify(sData), function (result) {
// etc
});
});
服务器端:
public class SurveyData
{
public string FieldName1 { get; set; }
public string FieldName1 { get; set; }
}
[WebMethod(true)]
public bool SaveCSSurvey(string sDataJson)
{
SurveyData sData = JsonConvert.DeserializeObject<SurveyData>(sDataJson);
List<string> fieldNames = new List<string>(); // this will be populated with the field names
foreach (var fieldName in fieldNames)
{
s.GetType().GetProperty(fieldName).SetValue(s,
((string)sData.GetType().GetProperty(fieldName).GetValue(sData)));
}
}
我的问题:
如何动态生成要传递给 AJAX 服务的 JSON 对象?即。取而代之的是:
var sData = {
FieldName1: $('#slFieldName1').val(),
FieldName2: $('#slFieldName2').val()
};
。我需要某种包含所有字段名称的 JavaScript 集合,并通过迭代字段名称来创建此对象。
编辑:问题的症结是创建此JSON对象。即使我只是使用 jQuery 遍历每个选择列表,然后通过修剪其"id"属性来获取字段名称,我将如何创建 JSON 对象。
如果您只想提交表单,则可以将其作为表单编码数据提交并使用serialize()
.假定根据表单的要求使用正确的name
属性。
$.post(url, $('#formId').serialize(), function(resp){
// do something with response
});
如果您确实需要如图所示的对象,则可以遍历每个输入并将其名称映射到对象
var formData ={};
$('#formId :input').each(function(){
formData[this.name] = this.value;
});
在 ES5 中,您只能使用简单的赋值来执行此操作,例如在迭代中(而不是作为文本的一部分进行赋值)
var sData = {}
fieldNames = ["FieldName1","FieldName2"]
fieldNames.forEach(function(fieldName) {
sData[fieldName] = $('#sl'+fieldName).val()
})
在 ES6 中,您可以使用更简洁的方式,但这不支持迭代 - 只是积极设置所有字段名称/值
var sData = {
[fieldName] = ...
}
如果要从字段自动生成 JSON 对象。我认为以下示例就是您要查找的。
输出:
Object {FieldName1: "A", FieldName2: "A"}
希望这有帮助。
片段
$('#btnSave').click(function (e) {
var sData = {};
$('select[id^="slFieldName"]').each(function(){
var attribute_name = $(this).attr('id').replace('sl',''); //Removing string 'sl'
sData [attribute_name] = $(this).val();
});
console.log(sData); //Object {FieldName1: "A", FieldName2: "A"}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select id="slFieldName1"><option value="A">A</option><option value="B">B</option></select>
<select id="slFieldName2"><option value="A">A</option><option value="B">B</option></select>
<button id='btnSave'>Save</button>
相关文章:
- jQuery匹配JSON对象的部分文本
- 如何在Javascript中将JSon对象转换为数组
- 我可以在json对象中添加一个函数吗
- 使用JS将数组转换为json对象
- 我应该如何将响应数据保存在对象(json)中以获得更好的操作和性能
- 用javascript从列表对象(JSON的)构建diffrent选项卡
- php请求带有多个对象json-jquery
- AngularJS,过滤器:如何将一个巨大的对象(JSON)变成一个数组
- 动态属性对象 - JSON
- JavaScript 对象 (JSON) 中的动态设置值
- 从数组查询获取对象 JSON 值时出错
- 使用jQuerygetJSON将多维对象JSON转换为HTML
- 需要从 Angular JS 应用程序中的另一个 JSON 对象数组填充 JSON 数组的每个对象 JSON 对象数组
- 嵌套对象JSON排序JavaScript
- PHP在MySQL中保存来自Javascript的对象"JSON.stringify"通过Ajax
- 将JavaScript对象/ JSON转换为PHP数组
- JSON对象.JSON对象内部
- 访问对象的对象- JSON API
- 数组到对象JSON
- Message":"传入的无效对象(JSON数据格式化问题)