这似乎是一个简单的语法问题,但我被困住了。我正在构建像这样的$ .ajax方法(POST)的数据部分
data = {var1:value1,var2:value2,var3:value3}
这项工作很好。
我需要添加一些以前在循环中创建的键/值对(并从HTML5会话存储中检索),就像这样
moredata = 'var4:value4,var5:value5,var6:value6'
我的问题是如何将'moredata'中的值添加到'data'
答案 0 :(得分:1)
您当然可以将它们作为数组传递。
data = {var1:value1,var2:value2,var3:value3, arrVars:moredata}
答案 1 :(得分:1)
您可以使用jquery extend方法来执行此操作
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 extends api
的更多信息here更新了包含将字符串转换为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函数就会像我之前解释的那样工作。
答案 2 :(得分:0)
data['var4'] = 'value4';
data['var5'] = 5;
data['var6'] = 6;
等等
答案 3 :(得分:0)
我相信您希望将整个数据部分作为一个字符串,因此我建议您通过连接加入两个字符串。您所要做的就是等到连接时间,然后再添加开始和结束花括号,即{}。见这个
data = 'var1:value1,var2:value2,var3:value3'
moredata = 'var4:value4,var5:value5,var6:value6'
data = '{' + data + ',' + moredata + '}'