下面的问题-我必须多次调用ajax函数,当所有函数完成后,将所有结果放入数组。我想到了这个:
function doAjax(xx){
var xdata = {json: $.toJSON({name: xx}),
delay: 1};
return $.ajax({
url:"/echo/json/",
data:xdata,
type:"POST"
});
}
var carr = [doAjax('a'),doAjax('b'),doAjax('c'),doAjax('d')]
var result = [];
$.when( carr )
.done(function(data){
console.log(data);
$.each(data, function(ix,val){
console.log(val.name);
});
});
在这里小提琴:http://jsfiddle.net/Fkd9n/
一切似乎都很正常,“console.log(data)”用响应文本写出对象,但“console.log(val.name)”总是“未定义”。那么,一旦所有调用完成,如何将所有结果合并到一个数组中呢?
谢谢你!
您可以使用管道函数来处理结果数据。
$.when.apply($, carr).pipe(function(){
console.log(arguments);
return $.map(arguments, function(item){return item[0]});
})
.done(function(data){
console.log(data);
$.each(data, function(ix,val){
console.log(val.name);
});
});
http://jsfiddle.net/Fkd9n/6/
如果你知道你有多少个Ajax调用,只需使用$。
$.when(doAjax('a'),doAjax('b'),doAjax('c'),doAjax('d'))
.then(function(result_a,result_b,result_c,result_d) {
console.log("Result from query a: " + result_a);
console.log("Result from query b: " + result_b);
console.log("Result from query c: " + result_c);
console.log("Result from query d: " + result_d);
});
如果你不知道你将有多少ajax调用,你可以自己管理延迟的对象。
// altered version of doAjax()
function doAjax(number,dObject) {
var xdata = {json: $.toJSON({name: number}), delay: 1};
$.ajax({
url:"/echo/json/",
data:xdata,
type:"POST",
success: function(data) {
results.push(data);
dObject.resolve();
}
});
}
// array that will contain all deferred objects
var deferreds = [];
// array that will contain all results
var results = [];
// make the ajax calls
for (var i = 0; i < someNumber; i++) {
var dObject = new $.Deferred();
deferreds.push(dObject);
doAjax(i,dObject);
}
// check if all ajax calls have finished
$.when.apply($, deferreds).done(function() {
console.log(results);
});
神奇的是,函数应用()为函数的参数创建了一个数组。
问题内容: 接下来的问题-我必须多次调用ajax函数,当所有函数完成时,将所有结果放入数组。我想出了这个: 在这里提琴:http : //jsfiddle.net/Fkd9n/ 一切似乎都工作正常,“ console.log(data)”用响应文本写出对象,但是“ console.log(val.name)”始终为“未定义”。那么一旦所有调用完成,如何将所有结果合并到一个数组中呢? 谢谢! 问题答
问题内容: 我试图在加载器图标和成功的html之间添加一个小的延迟(2秒)。 我尝试使用的是setTimeout并放入延迟号。这是行不通的,所以我希望您能告诉我正确的方法是什么。 我的ajax代码: 现在,它运行得非常快。希望有人能帮忙。 问题答案: 应该用在里面 。
我有一种情况,我的ajax调用必须以特定的顺序执行。我在其他情况下使用了jQueryDeferred对象,但似乎找不到一种方法来使其正常运行。 我有一个函数,在它的生命周期中执行许多请求。一些请求将在其他请求的成功回调期间执行。 我的问题:当调用时,是否有方法将所有嵌套的延迟对象返回到原始的
问题内容: 我有一个jQuery Ajax请求,我想用文本输入调用它,因此我将其嵌套在里面。这很好。 但这有时表现为越野车。当我非常快速地输入一些文本时,我得到的输入单词的结果中省略了原始输入单词的最后几个字母(可能是浏览器的某些错误)。我希望在没有输入活动持续一秒钟的情况下发送ajax请求,如果我很快输入文本并休息一秒钟(意味着我进行了输入)。我怎样才能做到这一点? 问题答案: 听起来好像是从先
问题内容: 我需要发出一系列N ajax请求而不锁定浏览器,并且想要使用jquery延迟对象来完成此操作。 这是一个具有三个请求的简化示例,但是我的程序可能需要排队100个以上(请注意,这不是确切的用例,实际代码的确需要在执行下一个步骤之前确保步骤(N-1)的成功步): 这是写入控制台的内容(所有请求都是并行进行的,响应时间与预期的每个国家/地区的数据大小成正比: 我怎样才能让延期的对象为我排队呢
问题内容: 我可能正在做一些愚蠢的事情。但是,如果我有一个像这样的普通链接: 然后将jQuery click事件附加到链接,如下所示: 一切正常。该页面并 没有 重定向到/不/拦截,这就是我认为是正确的。 现在… 我将$ .get之类的ajax调用引入了click事件,现在我的页面将被错误地重定向到该页面,这实际上覆盖了ajax调用。 有没有一种方法可以使jQuery或javascript仍然拦截