Javascript 使用jQuery'执行命令;s阿贾克斯
我有以下代码(ajax是异步的): 输出“你好”和“世界”(按该顺序)。但是如果稍微更改一下,那么Javascript 使用jQuery'执行命令;s阿贾克斯,javascript,jquery,ajax,Javascript,Jquery,Ajax,我有以下代码(ajax是异步的): 输出“你好”和“世界”(按该顺序)。但是如果稍微更改一下,那么console.log()的顺序就不同了: function echoHello() { return "hello"; } function echoWorld() { return $.ajax({ //this will return "world"; }); } $.when(echoWorld()).don
console.log()
的顺序就不同了:
function echoHello()
{
return "hello";
}
function echoWorld()
{
return $.ajax({
//this will return "world";
});
}
$.when(echoWorld()).done(function(response)
{
console.log(response);
});
console.log(echoHello());
是否保证相同的输出?或者它可能会输出“world”然后“hello”?Ajax调用web服务器,并且是异步的。你不知道要花多长时间。这和
setTimeout({console.log('world');},0);
log('Hello')代码>$.ajax()返回一个实现Promise接口的对象。如果选项为false,它将发送一个同步Ajax请求,并返回一个已解决的承诺
对于参数,如果参数既不是延迟的,也不是承诺的,也不是不可更改的,则返回已解决的承诺
所以下面的示例将打印“Sync”、“Hello”、“World”、“Async”
请注意,从jQuery 1.8开始,不推荐在jqXHR中使用async:false。保证-同步代码总是在异步代码启动之前完成。这对于理解这一切是如何工作的非常有用。这取决于注释隐藏的内容是否可以更改:但是如果您确定echoWorld
是异步的,那么是的,这里的顺序是有保证的。
function echoHello()
{
return "hello";
}
function echoWorld()
{
return $.ajax({
//this will return "world";
});
}
$.when(echoWorld()).done(function(response)
{
console.log(response);
});
console.log(echoHello());
jQuery(document).ready(function( $ ){
let echoHello = () => "Hello";
let echoAsync = () => $.ajax({url: "data:text,Async"});
let echoSync = () => $.ajax({ async: false, url: "data:text,Sync" });
let log = response => console.log(response);
$.when(echoAsync()).done(log); // logs "Async"
$.when(echoSync()).done(log); // logs "Sync"
$.when(echoHello()).done(log); // logs "Hello"
console.log('World'); // logs "World"
});