我希望通过$ .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推入其中然后对其进行字符串化......
答案 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。希望有帮助