0

这似乎是一个简单的语法问题,但我被困住了。我正在为这样的 $.ajax 方法(POST)构建数据部分

data = {var1:value1,var2:value2,var3:value3}

这工作很好。

我需要添加一些以前在循环中创建的键/值对(并从 HTML5 会话存储中检索),就像这样

moredata = 'var4:value4,var5:value5,var6:value6'

我的问题是如何将“moredata”中的值添加到“data”

4

4 回答 4

1

您当然可以将它们作为数组传递。

data = {var1:value1,var2:value2,var3:value3, arrVars:moredata}
于 2013-07-18T12:45:44.360 回答
1

您可以使用 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 函数就会像我之前解释的那样工作。

于 2013-07-18T12:49:11.943 回答
0

我相信您会希望将整个数据部分作为一个字符串,因此我建议您通过串联连接这两个字符串。您所要做的就是等到连接时间,然后再添加开始和结束花括号,即{}。看到这个

data = 'var1:value1,var2:value2,var3:value3'
moredata = 'var4:value4,var5:value5,var6:value6'
data = '{' + data + ',' + moredata + '}'
于 2013-07-18T13:03:29.833 回答
0
data['var4'] = 'value4';
data['var5'] = 5;
data['var6'] = 6;

等等

于 2013-07-18T12:43:53.967 回答