如何确保JQuery的一行在另一行之前运行
How can I ensure one line of JQuery run before another
当用户单击按钮时,我想显示一些内容,然后执行ajax请求,然后隐藏该内容。但我没办法做到。我的代码:
$('div').on('click', '.button', function(e){
$('.spinner').show();
$.ajax({
url: '/url.php',
// some other params
});
$('.spinner').hide();
});
我做不到。div没有显示,但是ajax通过了。有时ajax需要几秒钟的时间,所以它并不是立即显示和隐藏的。为什么是这样?如何在运行ajax请求之前强制显示div?
使用异步代码,您不能再"线性"思考了。异步操作不会"等待"完成,只是启动,然后执行下一个操作。你将不得不使用回调或承诺来代替你目前的方法。
例如,在您的案例中,$.ajax
方法使用方法done
(或者您可以使用success
配置方法)返回一个对象,一旦服务器的响应可用,就会调用该对象:
$('div').on('click', '.button', function (e) {
$('.spinner').show();
$.ajax({
url: '/url.php',
// some other params
})
.done(function() {
$('.spinner').hide();
});
});
您可以制作一些通用的东西:
$(document).ajaxStart(function () {
$('.spinner').show();
});
$(document).ajaxStop(function () {
$('.spinner').hide();
});
只要在layout
或Master Page
中的某个位置添加此代码,无论何时生成任何ajax request
,它都会加载此微调器。
相关文章:
- 如何使用phaser使html5游戏在移动设备浏览器上运行
- 使用压缩的JavaScript文件(不是运行时压缩)
- Javascript运行php文件,然后下载文件
- chrome扩展:尽管运行了at:documentidle,js脚本还是过早启动
- 我已经创建了一个jquery转盘,并使用if条件来运行和停止转盘
- Angularjs代码未在匿名函数中运行
- 在终端中运行 JavaScript 时(使用 rhino),如何使用 print() 函数在一行中打印
- 如何确保JQuery的一行在另一行之前运行
- 仅通过最后一行运行Google脚本
- 如何在 Node.js 中为非常大 (> 1GB) 文件的每一行运行异步函数
- 在更新数据库中的一行之后,再次运行php行
- Firefox ONLY不会在if语句中运行一行javascript代码,但会运行其他行——chrome和safari运
- 为什么Protractor会立即运行每一行代码
- 在运行循环的每一行时添加一个暂停
- 我如何触发模糊和运行通过所有输入在一行
- 附加到元素的脚本标记会在.append()之后的下一行之前运行吗?
- javascript animation:为什么下一行在动画结束之前运行
- 运行一行javascript代码
- 为表- MVC中的每一行运行OnChange事件
- 在前一行代码完成后运行一行jQuery