jquery 插件 - 使 ajax 调用可链接
jquery plugin - make ajax call chainable
我正在尝试编写一个 jquery 插件。
现在,我想在这个插件的功能之一中使用 ajax-调用。
但是它应该是可链接的,这意味着在这种情况下应该执行 ajax-调用,并且只有在 returned 之后,才会发生 return。
我尝试了不同的方法,但到目前为止我无法做到,因此链中的第二个函数在 ajax 调用的 return 值被检索后真正执行;
在这个版本中(见下文)我可以使用
$(document).createDatabase().message();
所以,链接有效。
但是查看控制台日志——message() 函数在 createDatabase() 中的 ajax 调用完成之前执行。
我怎样才能做到
$(document).createDatabase().message();
首先 returns ajax 调用的 output/return 是在 createDatabase() 内部并且仅在 message() 执行之后?
代码:
(function($) {
$.fn.createDatabase = function(options) {
// Plugin options defaults
var settings = $.extend({
name: 'NA',
onExit: function() {} // callback function
}, options);
$.ajax({
method: "POST",
url: "plugin/php/createDatabase.php",
data: settings
})
.done(function(msg) {
console.log("createDatabase executed with message: " + msg);
settings.onExit.call();
});
return this;
};
$.fn.message = function() {
console.log('this should appear after the console-log message of createDatabase');
return this;
}
}(jQuery));
谢谢!
你可以做几件事,但它们都是一个坏主意。原因是它们是两个独立的 jQuery 插件 - 一个插件应该能够独立工作。没有人不做 .message().createDatabase()
的保证或理由。如果您需要保证执行顺序,那么您应该只使用一个插件。一种可能的方法是在调用 .createDatabase(options)
时在 options
中传递 message
,然后在调用完成时传递 运行 message
。像这样
$(document).createDatabase({
message: function() {...}
});
...
var promise = $.ajax({
method: "POST",
url: "plugin/php/createDatabase.php",
data: settings
})
.done(function(msg) {
console.log("createDatabase executed with message: " + msg);
settings.onExit.call();
});
...
if ( settings.message )
promise.done( settings.message.bind(this) );
I tried different things but so far I could not make it so that the second function in the chain is really executed after the return value of the ajax call was retrieved;
第二个函数在第一个函数完成时执行。第一个以 return this
结束,但这发生在 ajax 调用完成之前,因为 ajax 调用是异步的。
我正在尝试编写一个 jquery 插件。
现在,我想在这个插件的功能之一中使用 ajax-调用。
但是它应该是可链接的,这意味着在这种情况下应该执行 ajax-调用,并且只有在 returned 之后,才会发生 return。
我尝试了不同的方法,但到目前为止我无法做到,因此链中的第二个函数在 ajax 调用的 return 值被检索后真正执行;
在这个版本中(见下文)我可以使用
$(document).createDatabase().message();
所以,链接有效。 但是查看控制台日志——message() 函数在 createDatabase() 中的 ajax 调用完成之前执行。
我怎样才能做到
$(document).createDatabase().message();
首先 returns ajax 调用的 output/return 是在 createDatabase() 内部并且仅在 message() 执行之后?
代码:
(function($) {
$.fn.createDatabase = function(options) {
// Plugin options defaults
var settings = $.extend({
name: 'NA',
onExit: function() {} // callback function
}, options);
$.ajax({
method: "POST",
url: "plugin/php/createDatabase.php",
data: settings
})
.done(function(msg) {
console.log("createDatabase executed with message: " + msg);
settings.onExit.call();
});
return this;
};
$.fn.message = function() {
console.log('this should appear after the console-log message of createDatabase');
return this;
}
}(jQuery));
谢谢!
你可以做几件事,但它们都是一个坏主意。原因是它们是两个独立的 jQuery 插件 - 一个插件应该能够独立工作。没有人不做 .message().createDatabase()
的保证或理由。如果您需要保证执行顺序,那么您应该只使用一个插件。一种可能的方法是在调用 .createDatabase(options)
时在 options
中传递 message
,然后在调用完成时传递 运行 message
。像这样
$(document).createDatabase({
message: function() {...}
});
...
var promise = $.ajax({
method: "POST",
url: "plugin/php/createDatabase.php",
data: settings
})
.done(function(msg) {
console.log("createDatabase executed with message: " + msg);
settings.onExit.call();
});
...
if ( settings.message )
promise.done( settings.message.bind(this) );
I tried different things but so far I could not make it so that the second function in the chain is really executed after the return value of the ajax call was retrieved;
第二个函数在第一个函数完成时执行。第一个以 return this
结束,但这发生在 ajax 调用完成之前,因为 ajax 调用是异步的。