我可以做更多有javascript同时做两件事吗?
我有一个奇怪的需要。 我想在javascript中执行以下操作:
- 当一个函数被调用时我想改变DIV的颜色然后1/2秒后我想改回它
- 在(1)我想做一个Ajax调用的同时。 通话通常需要一秒钟
换句话说,我希望步骤1和步骤2同时开始。
我对javascript的了解非常基础。 这种事情有可能吗? 如果我使用jQuery,那会更容易吗?
您可以使用jQuery及其functionqueue
来延迟操作。
我在jsFiddle上分叉了wdm的版本,将其更改为queue
样式,而不是setTimeout
。 我个人认为,这是一种更清洁,更好的方式来实现您的目标。
这是分叉的演示
这是JavaScript代码:
$('#change').click(function(e) { e.preventDefault(); $('#a') .css('background-color', 'blue') .delay(500) .queue(function(next){ $(this).css('background-color', 'red'); next(); }); $.ajax({}); // do the ajax call here });
我为你创造了第一部分。 它将颜色设置为蓝色,然后在半秒后(500毫秒)返回红色。
然后,您可以在我有注释的地方添加ajax请求的代码。 颜色更改和ajax调用将在调用函数的同时开始。
演示: http : //jsfiddle.net/wdm954/H39XZ/1/
$('#change').click(function(e) { e.preventDefault(); $('#a').css('background-color', 'blue'); setTimeout(function() { $('#a').css('background-color', 'red'); }, 500); // Insert ajax call here });
一个重要的概念是javascript是一个单线程的东西。 只有一件事真的发生,没有并行任务。
这是一个很好的教程 ,可以详细了解这一点。
现在,这并不意味着javascript执行似乎是最终用户的单线程。 你有很多工具可以使用异步ajax调用和基于计时器的事件(比如动画中使用的jQuery队列),这些工具会使javascript作业中断。 这意味着一些工作将逐步完成,对于几个图形区域,您将获得最终的印象,他们并行完成。
这就是为什么@Shef的答案是对的,以及@ anirudh4444的答案。
AJAX的目的是进行异步调用。 如果希望它们稍后执行,可以使用setTimeout()
和setInterval()
执行函数。