这似乎是一个简单的语法问题,但我被困住了。我正在为这样的 $.ajax 方法(POST)构建数据部分
data = {var1:value1,var2:value2,var3:value3}
这工作很好。
我需要添加一些以前在循环中创建的键/值对(并从 HTML5 会话存储中检索),就像这样
moredata = 'var4:value4,var5:value5,var6:value6'
我的问题是如何将“moredata”中的值添加到“data”
您当然可以将它们作为数组传递。
data = {var1:value1,var2:value2,var3:value3, arrVars:moredata}
您可以使用 jquery 扩展方法来执行此操作
var originalData = {val1: value1, val2: value2};
var moreData = {val3: value3, val4: value4, val1: newValue1}; // i did newValue1 on purpose see below
$.extend(originalData, moreData); // this basically pushes the moreData into the originalData, it will also update any matching values to the new ones
所以最终值看起来像这样
orignalData = {val1: newValue1, val2: value2, val3: value3, val4: value4};
希望这对您有所帮助,您可以在此处获取有关 jQuery 扩展 api 的更多信息
更新了答案以包含将字符串转换为 json 对象的代码
function convertBadJsonStringToGoodJsonObject(badString){
// expected format will not work with other format
// 'var4:value4,var5:value5,var6:value6'
// also assumes the the value4 and value5 VALUES are the "actual" string values of the key/value pair. if not then they will need to be put in the string.
var returnData = {};
// first split on ,
var keyValues = badString.split(",");
for(var i = 0; i < keyValues.length; i++){
// ok should be a list of items like this
// 'var4:value4
// now we need to split on the :
var keyValuePair = keyValues[i];
var pair = keyValuePair.split(":");
if (pair.length === 2){
var key = pair[0];
var value = pair[1];
// now convert this to a json object
var stringifiedJson = '{"' + key + '":"' + value + '"}';
// should look like this now
// '{"var4":"value4"}'
try{
var newProperJsonObject = JSON.parse(stringifiedJson);
$.extend(returnData, newProperJsonObject);
} catch (ex) {
// something went wrong with the parse, perhaps the original format wasnt right.
}
} // else not a valid pair
}
return returnData;
}
var badString = 'var4:value4,var5:value5,var6:value6';
var goodObject = convertBadJsonStringToGoodJsonObject(badString);
console.log(goodObject);
关于上面的答案有几件事要解释。首先,JSON 格式是一种非常特殊的数据传输格式。虽然 javascript 使用它的惰性版本来使用它,但 JSON.parse 期望字符串采用“真实”的 json 格式。这意味着键需要用双引号括起来。在 javascript 中,您可以将对象定义为 {val: value1} 并且生活是美好的。但是对于 JSON.parse,字符串需要是 '{"val1":"value1"}'。如果你传递它'{val1:value1}'。它将中断并引发 javascript 异常。这就是为什么我把它包围在一个try catch中。
我故意让这个函数变得冗长,但请随时提出问题。一旦你的字符串对象被正确转换,$.extend 函数就会像我之前解释的那样工作。
我相信您会希望将整个数据部分作为一个字符串,因此我建议您通过串联连接这两个字符串。您所要做的就是等到连接时间,然后再添加开始和结束花括号,即{}。看到这个
data = 'var1:value1,var2:value2,var3:value3'
moredata = 'var4:value4,var5:value5,var6:value6'
data = '{' + data + ',' + moredata + '}'
data['var4'] = 'value4';
data['var5'] = 5;
data['var6'] = 6;
等等