在for循环中生成Ajax数据字符串

时间:2015-07-15 14:01:31

标签: javascript jquery arrays

我有2个数组。一个包含键,另一个包含输入值,如下所示:

var keys   = ['id', 'name', 'category'];
var values = ['1', 'nameVal', 'catVal'];

现在我要做的是使用循环创建一个数据字符串,用于jQuery Ajax函数:

var dataString = 'id=1&name=nameVal&category=catVal'; 

$.ajax({
    data: dataString,
    ...
});

所以我尝试编写这样的函数:

function generateDataString(keys, values, ID)
{
    var dataString = 'id=' + ID;

    for (var i = 0; i < values.length; ++i) 
    {
        var dataString += '&' + SOMETHINGHERE + '=' + values[i];
    }

    return dataString;
}

我已经在values循环中推送for,但在 SOMETHINGHERE 的位置,我也需要获取密钥。

我还使用了+=运算符,我认为这是正确的方法,但是我收到了以下错误:

enter image description here

有谁知道我哪里出错了,以及我如何使用key中的dataString

如果使用jQuery更容易实现这一目标,那么这也很好

4 个答案:

答案 0 :(得分:1)

替换:

var dataString += '&' + SOMETHINGHERE + '=' + values[i];

使用:

dataString += '&' + SOMETHINGHERE + '=' + values[i];

你不能添加&#34;到你要声明的变量。 (该声明不应该首先出现在那里)

答案 1 :(得分:1)

你必须摆脱for循环中的var。

var keys   = ['id', 'name', 'category'];
var values = ['1', 'nameVal', 'catVal'];

 var dataString = 'id=' + '28';

    for (var i = 0; i < values.length; ++i) 
    {
       dataString += '&' + keys[i] + '=' + values[i];
    }

alert(dataString);

工作jsfiddle:https://jsfiddle.net/fLo65noL/

我用键[i]修改你的SOMETHINGHERE,我认为你的身份证是28岁。

您将拥有类似:id=28&id=1&name=nameVal&category=catVal

的内容

答案 2 :(得分:1)

您的错误是您在该行上有var这一事实。删除var

但是没有必要生成字符串,使用对象。

var keys   = ['id', 'name', 'category'];
var values = ['1', 'nameVal', 'catVal'];

var data = {};
for (var i=0;i<keys.length;i++){
    data[keys[i]] = values[i];
}

$.ajax({
    data: data,
    ...
});

实际上,没有必要拥有两个数组,只需要启动对象。

var data = {
   'id' : "1",
   'name' : "nameVal",
   'category': "catVal"
};

答案 3 :(得分:0)

这部分代码会导致问题

 for (var i = 0; i < values.length; ++i) 
    {
        var dataString += '&' + SOMETHINGHERE + '=' + values[i]; // This one
    }

你在这里要做的是你要声明变量&#34; dataString&#34;但是当你创建它时,将一些字符串附加到变量内容。

你已经在循环之前延迟了变量,所以不需要在循环中的每一步重新声明它,特别是如果你想在每一步附加一些字符串。

 for (var i = 0; i < values.length; ++i) 
    {
        dataString += '&' + SOMETHINGHERE + '=' + values[i]; // This one
    }