我有一个表单,我需要从以下位置获取值:
var formConfig = JSON.stringify($("#bookingform").serializeArray());
返回以下内容:
[{"name":"client_id","value":"1"},{"name":"consignee_id","value":""},{"name":"client","value":"DAKO"},{"name":"model","value":"2"},{"name":"type","value":"2"},{"name":"temperatur","value":"2"},{"name":"shipper_labels","value":"1"},{"name":"batteri_labels","value":"1"},{"name":"batteri_number","value":"2222"},{"name":"pickup","value":"April 27, 2017 18:25"},{"name":"intern_marks","value":"fdsfads"},{"name":"extern_marks","value":"sadsfdsf"},{"name":"consignee","value":""},{"name":"marks","value":""}]
然后我需要从JSON字符串中访问上述值,我将此函数用于:
var confirmBooking = function(element, setting, correct, notcorrect) {
$('.confirm-booking')
.find(element)
.html(setting === 1 ? correct : notcorrect);
};
想到的是,我可以使用上面的功能:
confirmBooking('.config_batteri', formConfig.client_id, "Yes", "No");
依旧......
formConfig.client_id
应该返回1
,因为它是上面JSON字符串中的值。
然而它返回undefined
:
console.log(formConfig.client_id); // Returns "undefined"
答案 0 :(得分:2)
您需要使用JSON.parse()
,使其再次成为常规JavaScript对象。
JSON.stringify()
所做的是,顾名思义,使它成为一个字符串。这只是一个常规字符串,表示JSON数据。它并没有神奇地拥有JSON数据属性。
此外serializeArray()
返回{name: ..., value: ...}
个对象的数组。如果您没有将其转换为JSON字符串,则执行formConfig.client_id
仍无法轻松访问结果。您必须遍历formConfig
数组,才能找到所需的名称/值对。
从它的外观来看,你根本不需要将JavaScript对象转换为JSON,如果你只想在同一个脚本中使用它(除非你要在其他地方发送JSON字符串)也许)。
根据OP的评论,我假设OP只想访问特定表单元素的值。使用jQuery,可以通过以下方式轻松完成:
// get the value of the client_id element (assuming it's an input element)
var client_id = $( '#bookingform input[name="client_id"]' ).val();
// call the function
confirmBooking( '.config_batteri', client_id, "Yes", "No" );
如果您想拥有一个包含所有表单值的对象,请查看this question中的答案。
答案 1 :(得分:0)
会改变语法帮助吗?请尝试
console.log(formConfig[0]['client_id']);
我希望它适合你
答案 2 :(得分:0)
我认为这就是你想要的。
console.log(formConfig.confirmBooking);
答案 3 :(得分:0)
因为它是一个对象数组,所以你定位第一个返回一个对象的元素,然后使用" value"获取您期望的1
的实际值的属性。
还可以使用parseInt("1")
将1
作为"number"
希望这能解决问题!我没有尽快
==编辑
var formConfig = [{
"name": "client_id",
"value": "1"
}, {
"name": "consignee_id",
"value": ""
}, {
"name": "client",
"value": "DAKO"
}];
// This function returns the value for the name
function search(str) {
for (var obj of formConfig) {
if (obj.name == str) {
return obj.value;
}
}
}
search("client_id"); // 1
search("client"); // DAKO
答案 4 :(得分:0)
这样做:
var jsonStr = '[{"name":"client_id","value":"1"},
{"name":"consignee_id","value":""},
{"name":"client","value":"DAKO"},
{"name":"model","value":"2"},
{"name":"type","value":"2"},
{"name":"temperatur","value":"2"},
{"name":"shipper_labels","value":"1"},
{"name":"batteri_labels","value":"1"},
{"name":"batteri_number","value":"2222"},
{"name":"pickup","value":"April 27, 2017 18:25"},
{"name":"intern_marks","value":"fdsfads"},
{"name":"extern_marks","value":"sadsfdsf"},
{"name":"consignee","value":""},
{"name":"marks","value":""}]';
var obj = JSON.parse(jsonStr);
var val = obj[0].value;
您无法执行obj[0].name
的原因是因为您解析的JSON对象具有一组对象,其中第一个对象具有以下结构:
{
name:"client_id",
value:"1"
}
因此,您必须使用obj[0].value
NOT obj[0].name
来访问它,因为它会为您提供client_id
。