jQuery Mobile在一个函数完成后执行另一个函数
jQuery Mobile execute a function after another is completed
我试图在我的函数"aggregateTimes"完成后执行一个函数。
这是我想在运行函数之前完成的aggregateTime函数:
function aggregateTimes(date) {
$.ajax(
{
url: 'localhost/s',
dataType : 'xml',
success: function(data) {
$.each(data, function(index, calEvent){
//do some work here
});
},
error: function(){
alert('error message');
}
});
}
这是我现在调用函数的方式:
$('#mainpage').bind('pageinit', function(event) {
aggregateTimes(new Date());
$("#calendar").jqmCalendar(
{
events : eventsArray,
months : ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
days : ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"],
startOfWeek : 0
});
});
是否有办法等待函数"aggregateTimes"完成,在JQM之前?还是个新手,谢谢!
由于您使用jQuery ajax,使用complete
方法在ajax完成后执行一个函数。
function aggregateTimes(date){
$.ajax({
url: 'localhost/s',
dataType : 'xml',
success: function(data){},
error: function(){
alert('error message');
},
complete: function(){
myCustomFN();
//do all your stuff here when the ajax is completed
}
});
}
您的aggregateTimes
函数发送一个AJAX请求,因此从技术上讲,它在请求收到来自服务器的响应之前完成。如果您希望代码在请求收到响应后运行,您可以将代码移动到您已经在aggregateTimes
中定义的success
处理程序函数的末尾,或者您可以执行以下操作:
function aggregateTimes(date){
return $.ajax({
url: 'localhost/s',
dataType : 'xml',
success: function(data){
$.each(data, function(index, calEvent){
//do some work here
});
},
error: function(){
alert('error message');
}
});
}
$('#mainpage').bind('pageinit', function (event) {
var jqXhr = aggregateTimes(new Date());
jqXhr.done(function () {
$("#calendar").jqmCalendar({
events: eventsArray,
months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
days: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"],
startOfWeek: 0
});
});
});
jQuery的ajax
函数是一个Promise。如果你返回jQuery ajax对象,可以使用when...done
方法调用另一个函数。
看起来像这样:
$.when( functionThatReturnsPromise() ).done(function () }
// do stuff when the promise is complete
});
如果您在aggregateTimes
中返回ajax对象,它将在上面的示例中填充"functionThatReturnsPromise
"的角色:
function aggregateTimes(date){
return $.ajax({
....
返回ajax对象还可以简单地将函数调用视为Deferred对象:
aggregateTimes(new Date()).done(function () {
// do stuff when aggregateTimes is done
});
文档-
jQuery.promise
- https://api.jquery.com/promise/ -
jQuery.when
- https://api.jquery.com/jQuery.when/ -
jQuery.ajax
- https://api.jquery.com/jQuery.ajax/ -
deferred.done
- https://api.jquery.com/deferred.done/ - jQuery Deferred Object - https://api.jquery.com/category/deferred-object/
您有几个选择。一种方法是使用回调。向aggregateTimes()
添加一个附加参数,指定完成时要调用的函数。如果你喜欢的话,它可以是一个匿名函数。
function aggregateTimes(date, callback){
$.ajax({
url: 'localhost/s',
dataType : 'xml',
success: function(data){
$.each(data, function(index, calEvent){
//do some work here
});
callback();
},
error: function(){
alert('error message');
}
});
}
// ...
aggregateTimes(new Date(), function() {
$("#calendar").jqmCalendar({
events : eventsArray,
months : ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
days : ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"],
startOfWeek : 0
});
});
由于您使用的是jQuery,另一种选择是使用$.Deferred
。让aggregateTimes()
返回一个Deferred对象:
function aggregateTimes() {
var deferred = new $.Deferred();
//...
success: function(data){
$.each(data, function(index, calEvent){
//do some work here
});
deferred.resolve();
},
//...
return deferred;
}
然后在$.Deferred
完成时调用第二个函数。
var wait = aggregateTimes();
wait.done(function() {
$("#calendar").jqmCalendar({
events : eventsArray,
months : ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
days : ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"],
startOfWeek : 0
});
});
相关文章:
- 如何在JQuery函数中定义一个值,然后调用另一个函数并使用该值
- 是否可以将一个函数输入连接到另一个函数调用的文本
- 在另一个函数中使用变量this
- 在另一个函数成功结束后调用该函数
- 多次调用另一个javascript函数中的javascript函数
- 使用JS函数来使用另一个函数的语法?node.js
- 嵌套到另一个函数中的Fancybox函数;不起作用
- 如何从onclick函数设置全局变量并将其传递给另一个JS文件
- javascript函数将数据添加到屏幕,但随后被另一个函数覆盖
- 另一个Ajax函数触发的Ajax函数不起作用
- 如何从另一个处理程序内部取消JavaScript事件处理程序函数的执行
- 如何在不预定义的情况下将javascript函数传递到另一个函数中
- 从另一个函数获得$this值
- 如何记录调用另一个函数的函数的返回值
- 它在另一个函数中嵌套后不会输出文本
- 如何将自动完成的值传递到另一个函数中
- 将一个函数作为参数传递给javascript中的另一个函数
- 同一事物的两个函数,一个崩溃,另一个不崩溃,为什么
- 从另一个函数延迟解析的返回
- 多次调用promise函数,直到另一个promise函数满足条件