Javascript / jQuery将变量设置为多个$ .ajax调用的对象属性

时间:2014-10-29 10:31:49

标签: javascript jquery ajax json

我希望通过$ .ajax作为JSON发送许多不同的查询。

我已使用以下内容将这些查询存储在对象中:

var objectName = { 
"name1": { 
    "queryName": "longname1", 
    "queryAction": "JSONtoSend" 
}, 
"name2": { 
    "queryName": "longname2", 
    "queryAction": "JSONtoSend" 
},  
};

然后我会查看queryActions并设置它们:

for (var i = 0, len = Object.keys(objectName).length; i < len; ++i) {
    var indexName = Object.keys(objectName)[i];
    objectName[indexName].queryAction = "";

    var JSONtoTransfer = objectName[indexName].queryAction;
}

$.ajax({
    type: "POST",
    url: 'URL',
    data: JSONtoTransfer,
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function(dataReturn){
        alert(dataReturn.blah);
    }
});

我无法设置var JSONtoTransfer。它让我意想不到[错误。我该如何解决这个问题?如果我直接输入$ .ajax的数据参数,我会得到同样的错误。

我正在使用的代码正确地将查询存储在对象中,但是我需要一种方法来迭代它们并通过$ .ajax发送。

感谢您的帮助。这段代码可能不是最有效的做事方式,所以如果有人有任何建议,它也非常受欢迎: - )

所以我写错了原始代码,$ .ajax调用应该包含在for语句中。所以它实际上是迭代....

无论如何,我发现工作的是创建一个数组,将queryAction推入其中然后对其进行字符串化......

3 个答案:

答案 0 :(得分:0)

几个问题:

  • JSONtoTransfer超出了您的ajax调用范围。如果你想在每次迭代时填充JSONtoTransfer并且每次都使用这个不同的值发出一个ajax请求 - 将ajax调用放在for循环中(尽管我会认真考虑重构这个以便你进行一次ajax调用,并且以不同方式反序列化(如果它是您的服务器端代码处理它))
  • 您将objectName[indexName].queryAction设置为空字符串,然后将此值分配给JSONtoTransfer(现在始终为空字符串)
  • 您的for语法有点混乱。最佳做法是改变

    for (var i = 0, len = Object.keys(objectName).length; i < len; ++i) {

    for (var i = 0; i < Object.keys(objectName).length; ++i) {

    即。没有必要将len初始化为相同的值。注意:这更多是为了可读性,而不是(如此多)性能。如果你在循环中有len的另一个用途,这个建议就不适用了。

答案 1 :(得分:0)

您的变量objectName实际上已经是JSON数据。我可能错了,但我认为这应该有效(代码更少):

var jsonData = { 
    "name1": { 
        "queryName": "longname1", 
        "queryAction": "JSONtoSend" 
    }, 
    "name2": { 
        "queryName": "longname2", 
        "queryAction": "JSONtoSend" 
    },  
};

//Post with AJAX
$.post('url.php', jsonData, 'json')
.done(function(data) {
    alert('Succes!')
})
.fail(function(data) {
    alert('Failed!')
});

//This does the same (Post with AJAX)
$.ajax({
    url: 'url.php', //Get action attribute of the form
    type: "POST",
    data: jsonData,
    dataType: "json",
    .done(function() { //or success: function() {
            alert( "success" );
    })
    .fail(function() { //or error: function() {
            alert( "error" );
    })
    .always(function() { //or beforeSend: function() {
            alert( "complete" );
    });
});

答案 2 :(得分:0)

我不确定你想要什么,但正如其他人指出的那样,你的代码存在很多问题,但我认为你想要迭代地一个接一个地执行ajax调用。如果这就是你想要的,那么看看jQuery deffered -docs是here。希望有帮助