我有一个应用程序需要按特定顺序加载数据:根URL,然后是模式,然后最终使用各种数据对象的模式和URL初始化应用程序.当用户导航应用程序时,将加载数据对象,根据模式进行验证并显示.当用户CRUD数据时,模式提供首次通过验证.
我在初始化时遇到问题.我使用Ajax调用来获取根对象$ .when(),然后创建一个promises数组,每个模式对象一个.这样可行.我在控制台中看到了fetch.
然后我看到所有模式的获取,因此每个$ .ajax()调用都有效.fetchschemas()确实返回了一个promises数组.
但是,最终when()子句永远不会触发,并且"DONE"字样永远不会出现在控制台上.jquery-1.5的源代码似乎暗示"null"可以作为传递给$ .when.apply()的对象,因为when()将构建一个内部Deferred()对象来管理列表,如果没有对象是传入
这使用Futures.js.如果不是这样的话,应如何管理jQuery Deferreds数组呢?
var fetch_schemas, fetch_root;
fetch_schemas = function(schema_urls) {
var fetch_one = function(url) {
return $.ajax({
url: url,
data: {},
contentType: "application/json; charset=utf-8",
dataType: "json"
});
};
return $.map(schema_urls, fetch_one);
};
fetch_root = function() {
return $.ajax({
url: BASE_URL,
data: {},
contentType: "application/json; charset=utf-8",
dataType: "json"
});
};
$.when(fetch_root()).then(function(data) {
var promises = fetch_schemas(data.schema_urls);
$.when.apply(null, promises).then(function(schemas) {
console.log("DONE", this, schemas);
});
});
Run Code Online (Sandbox Code Playgroud) 除了jQuery版本之外,Deferred和Promise有什么区别?
我应该用什么来满足我的需求?我只想打电话给fooExecute().例如,我只需要fooStart()和fooEnd()切换html div状态.
//I'm using jQuery v2.0.0
function fooStart() { /* Start Notification */ }
function fooEnd() { /* End Notification */ }
function fooExecute() { /* Execute the scripts */ }
$('#button1').on('click', function() {
var deferred1 = $.Deferred();
var promise1 = $.Promise();
deferred1.???
promise1.???
});
Run Code Online (Sandbox Code Playgroud) $.ajax("example.php").done(function ()
{
alert(...);
}).fail(function ()
{
alert(...);
}).always(function ()
{
alert(...);
});
Run Code Online (Sandbox Code Playgroud)
VS
$.ajax("example.php",
success: function ()
{
alert('');
},
error: function ()
{
alert('');
},
complete: function ()
{
alert('');
}
);
Run Code Online (Sandbox Code Playgroud)
对不起,我不能看到任何优势
你能解释一下吗?
或者也许你能举例说明后者无法实现的前者......?
您好我正在做一个横向滚动网站,如:http://vanityclaire.com/
然而,在主页加载之后,我使用jQuery .load()在家里的孩子们中,而不是拥有一个大的HTML文件.
目前我为每个div和ajax in the url位于标题中.但是AJAX返回乱序,并且当我添加更多页面时,不要想用30多个http://请求来对服务器进行操作.
我如何同步执行AJAX调用,即在请求之前等待第一个回复,或者甚至一次发送两个.
我一直在淘,也无法弄清楚我需要什么.
这是我的HTML:
<div id="mainLayout" class="fullwidth scrollArea">
<div class="scrollItems">
<div id="page-1" class="scrollItem" title="/">
<div>HOME PAGE CONTENT</div>
</div>
<div id="page-2" class="scrollItem" title="/Page2.html">
<div class="loading"> </div>
</div>
<div id="page-3" class="scrollItem" title="/Page3.html">
<div class="loading"> </div>
</div>
<div id="page-4" class="scrollItem" title="/Page4.html">
<div class="loading"> </div>
</div>
<div id="page-5" class="scrollItem" title="/Page5.html">
<div class="loading"> </div>
</div>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
我的JS:
function s_loadingInitialPages() {
var loadingItems = new Array();
$(".scrollArea .scrollItem").each(function () {
if ($(this).attr('title') != '/') …Run Code Online (Sandbox Code Playgroud) 我有两个函数,当其他函数(一和二)完成时,我想调用第三个函数。我需要将第一个函数和第二个函数称为异步函数。例如
var func1 = function( do something..... return arr )
var func2 = function ( do something ..... return arr2 )
if ( arr.length > 0 && arr2.length > 0 )
var func3 = function( do something )
Run Code Online (Sandbox Code Playgroud)
我的问题:
最好的方法是什么?
如何以异步方式调用函数?
我阅读了关于使用jQuery Deferred的这个问题的最佳答案.
我正在遍历一系列ID.对于每个ID,我需要从ajax请求获取与之相关的数据,或者如果ajax请求之前已成功返回数据,则需要从缓存中获取数据.
在每个循环中,我使用$ .when()来观察getData()是否在处理该ID之前从缓存或成功的ajax调用返回一些内容.目前的问题是ID处理无论如何都要继续进行,而不必等待getData()的ajax成功.
一些伪代码:
var IDs = ["1", "2", "1", "3", "1"];
//ID "1" is repeated
//data for "1" should should require ajax get the first time
//subsequent processing should get data for "1" from dataCache
var dataCache = [];
function getData(ID){
if (/*data for ID in dataCache*/){
//return data pertaining to ID from dataCache
} else {
return $.getJSON("returnJSONDataByID/" + ID, function(resp){
//push resp data to dataCache
})
}
}
for (/*each item i …Run Code Online (Sandbox Code Playgroud)