我在 chrome 中遇到了一个非常奇怪的问题。
我的代码是
$('#import').text("Importing...");
$('#import img').removeClass("hidden");
Server.postService("tests", row_datas, function(data) {
// some stuff here
});
执行发布操作后,将删除文本和隐藏类。该代码在 Firefox 中运行良好。
我在 chrome 中遇到了一个非常奇怪的问题。
我的代码是
$('#import').text("Importing...");
$('#import img').removeClass("hidden");
Server.postService("tests", row_datas, function(data) {
// some stuff here
});
执行发布操作后,将删除文本和隐藏类。该代码在 Firefox 中运行良好。
唯一需要的是
Server.async = true
在服务器调用之前。
异步函数按出现顺序触发,但按完成时间顺序返回。text那些简单和removeClass方法的返回速度比您对对象所做的任何事情都慢,这很奇怪Server,但我想这是可能的。如果您需要前两行发生在 之前postService,您可以尝试 jQuery 的deferred.promise. 这是一个展示潜力的小提琴,以及一些要检查的代码:
function firstThing (){
var dfd = new jQuery.Deferred();
$('#import').text("Importing...");
$('#import img').removeClass("hidden");
dfd.resolve();
}
$.when( firstThing() ).then(
function() {
Server.postService("tests", row_datas, function(data) {
// some stuff here
});
}
)
作为旁注,您的代码逻辑是有问题的,因为通过设置textof #import,无论img有什么hidden类都将不再存在,但这可能不是重点。
更新
注意到您对我询问您使用 ajax 的评论的回复,我建议您阅读该async选项并了解您正在做什么可能会或可能不会阻止事件。
我还建议阅读有关jQuery ajax回调的信息,特别是error, success, 和complete(现在,使用 jQuery 1.8+、fail、done和always)。