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

Javascript/jQuery set variable to object property for multiple $.ajax calls

本文关键字:变量 设置 调用 对象 属性 jQuery Javascript ajax      更新时间:2023-09-26

我希望通过$.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推入其中,然后将其字符串化…

几个问题:

  • 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) {

    即不需要将CCD_ 8保持初始化为相同的值。注意:这更多的是为了可读性,而不是(那么多)性能。如果您在循环中使用len,则此建议不适用。

您的变量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" );
    });
});

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