2

我有一个计算每台服务器性能的网站。其中一个要求是关于表演的中心部分页面必须先完成加载,然后才能在后台执行另一个功能。

此中心部分页面使用 ajax 调用。它们是在document.readyjs 文件中定义的:

$(document).ready(function () {
// ajax call here
// another ajax call here
// third ajax call here
});

然后我想在文档里面的函数准备好之后执行的函数:

function functionA() {
// some codes here
});

我尝试使用这个:

$.when(document).ready(function () {
}).done(functionA);

但我不能让它运行..任何建议都将不胜感激。提前致谢!

4

2 回答 2

1

The first letter in AJAX stands for asynchronous which means that at the end of your document.ready event, they could be off somewhere else doing some processing. The document.ready will not wait for them to finish.

You need to set up jQuery using .when to tell you when all three AJAX calls are complete:

// Document.ready
$(function() {
    // Any synchronous code you may do on DOM ready goes here

    // Set up the promise
    $.when(
        // Pass in all your AJAX calls.
        $.ajax({ url: "/AjaxCall1?param=true" }),
        $.ajax({ url: "/AjaxCall2?param=1" }),
        $.ajax({ url: "/AjaxCall3?param=yup" })
    ).then(function() {
        console.log("All AJAX requests finished");
    }, function() {
        console.log("Something went wrong :(");
    });
});
于 2013-11-01T08:04:21.053 回答
0

这是一种同时处理 DOM 就绪事件和 Ajax 调用的方法:

var init, ajax1, ajax2, domready;
ajax1 = $.ajax({ url: '/1' });
ajax2 = $.ajax({ url: '/2' });
domready = $.Deferred();
$(domready.resolve);
init = $.when(domready, ajax1, ajax2);

http://api.jquery.com/category/deferred-object/

那么你就不需要再关心上面的代码了:

init.done(function () { alert('success'); });
init.fail(function () { alert('failure'); });
init.done(function ($, response1, response2) { 
    alert(response2[0]); // shows the data from the second Ajax call
});

这是一个现场演示:http: //jsfiddle.net/wared/s22dT/

关于您的尝试,jQuery.when()返回一个没有ready方法的 Promise 对象:

$.when().ready() // TypeError: Object #<Object> has no method 'ready'

http://api.jquery.com/jQuery.when/

于 2013-11-01T08:28:36.550 回答