Javascript/jQuery为多个$.ajax调用将变量设置为对象属性
Javascript/jQuery set variable to object property for multiple $.ajax calls
我希望通过$.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-这里有文档。希望对有所帮助
- 如何在Bootstrap Modal中为动态点击生成的变量设置jade属性
- Javascript使用变量设置属性
- 敲除js变量设置类似于调用函数
- 使用输入变量设置元素的值
- 为什么我们将控制器变量设置为等于“0”;这个“;在角度上
- 将外部控制器的范围变量设置为角度
- 谷歌地图标记在通过变量设置标记和经度时不保持不变
- 尝试在 jquery ajax 帖子中将变量设置为URL 的一部分
- 如果循环中至少有一个元素返回 false,如何将变量设置为 false
- 如何将宽度和高度变量设置为浏览器窗口的宽度和高度
- 如何将变量设置为外部内容
- 需要将变量设置为特定的数字范围
- 执行批处理文件的Javascript,该文件包含基于每个会话的环境变量设置
- 如何在jquery中基于变量设置某个东西的宽度
- 将变量设置为等于本地JSON文件
- 根据Angular中的单独变量设置下拉默认值
- 如何使用JavaScript变量设置函数集css宽度
- 如何为一个javascript变量设置give多个值
- 如何将javascript变量设置为php变量并将其存储在数据库中
- 如何在javascript中为变量设置一行setter