构建$ .ajax方法的“数据”部分,然后添加变量

时间:2013-07-18 12:42:24

标签: jquery ajax json

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

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

这项工作很好。

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

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

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

4 个答案:

答案 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:va​​lue1}'。它会破坏并抛出一个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 + '}'