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

Javascript/jQuery为多个$.ajax调用将变量设置为object属性,javascript,jquery,ajax,json,Javascript,Jquery,Ajax,Json,我希望通过$.ajax以JSON的形式发送许多不同的查询 我使用以下方法将这些查询存储在对象中: var objectName = { "name1": { "queryName": "longname1", "queryAction": "JSONtoSend" }, "name2": { "queryName": "longname2", "queryAction": "JSONtoSend" }, }; 然后,我将完成查询操作并设置它们

我希望通过$.ajax以JSON的形式发送许多不同的查询

我使用以下方法将这些查询存储在对象中:

var objectName = { 
"name1": { 
    "queryName": "longname1", 
    "queryAction": "JSONtoSend" 
}, 
"name2": { 
    "queryName": "longname2", 
    "queryAction": "JSONtoSend" 
},  
};
然后,我将完成查询操作并设置它们:

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);
    }
});
for(var i=0,len=Object.keys(objectName).length;i
我无法设置var JSONtoTransfer。它给了我一个意外的错误。我如何避免这个错误?如果我直接将它输入到$.ajax的数据参数中,我会得到相同的错误

我正在使用的代码将查询正确地存储在对象中,但我需要一种方法来遍历所有查询并通过$.ajax发送

感谢您的帮助。此代码可能不是最有效的操作方式,因此如果有人有任何建议,也非常欢迎:-)

所以我把原始代码写错了,$.ajax调用应该包含在for语句中

无论如何,我发现有效的方法是创建一个数组,将queryAction推入其中,然后将其字符串化…

几个问题:

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

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

    for(var i=0;i

    i、 e.无需将
    len
    初始化为相同的值。注意:这更多的是为了可读性,而不是(太多)性能。如果在循环中再次使用
    len
    ,则此建议不适用


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


我不确定您想要什么,但正如其他人指出的那样,您的代码存在许多问题,但我认为您希望以迭代方式一个接一个地执行ajax调用。如果这是您想要的,那么请查看jQuery deffered-docs are。希望这有助于

在循环对象:va之前,您必须定义JSONtoTransfer变量r JSONtoTransfer=[];对于(…){JSONtoTransfer.push(objectName[indexName].queryAction);}您为什么要设置
objectName[indexName].queryAction=“”;
?@A.Wolff我不是,它将是一个字符串/JSON。@SimonHarper您的代码对我来说没有多大意义……即使如此,您的
“JSONtoSend”
无效jsonIt不够清晰,无法理解您要发送的内容。它是字符串吗?是否希望objectName.keys作为POST参数?这是有效的,并且会起作用-但他请求的资源可能需要另一种形式的对象(这就是为什么他试图用
将其拆分为
)@DeeMac-我有许多不同的JSON查询,我希望存储它们。每个名称对应一个。谢谢。我把它作为一个例子,我实际上并没有将queryAction设置为空字符串。我希望将它设置为字符串,然后由$.ajax调用在“data:”参数字段中使用。不幸的是,我无法更改服务器端代码。我的错误是,$.ajax调用应该包含在For语句中。@SimonHarper看看这个(),也许会有所帮助。此外,为了澄清您想向ajax提供什么样的数据,您可以举个例子吗
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" );
    });
});