如何在jquery中创建嵌套的异步请求?

时间:2017-12-04 06:59:14

标签: javascript jquery ajax

在main.js中:

$.when(
    $.get('foo/bar.html'),
    $.get('lorem/ipsum.html')
).done(function(data1, data2){
     someCode();
});

在lorem / ipsum.html里面:

$.when(
    $.get('otherStuff.html'),
    $.get('example.html')
).done(function(data1, data2){
     moreCode();
});

如何在someCode()后运行moreCode()

3 个答案:

答案 0 :(得分:0)

应该是,

$.when( $.ajax( url ), $.ajax( otherUrl ) )
 .then( myFunc, myFailure );

function myFunc(){
   //get called on success.
}

function myFailure (){
   //get called, if either one has an error.
}

答案 1 :(得分:0)

使用then()https://api.jquery.com/jquery.when/

  

在传递多个Deferred对象的情况下   jQuery.when(),该方法从一个新的“主”返回Promise   跟踪所有Deferred的聚合状态的延迟对象   它已经过去了。该方法将解析其主延迟为   所有Deferreds解决之后,或者拒绝主人Deferreds   其中一名被延期的人被拒绝。如果主延期是   已解决,执行主延迟的doneCallbacks。该   传递给doneCallbacks的参数提供了已解析的值   每个Deferred,并匹配Deferreds传递的顺序   到jQuery.when()。

$.when(
    $.get(url),
    $.get(otherUrl)
).then(function(data1){
     someCode();
});

答案 2 :(得分:0)

我认为你的代码工作正常。

您可以尝试制作无效网址https://XXjsonplaceholder.typicode.comsomeCode不会被点击



var url1 = "https://jsonplaceholder.typicode.com/users/1";
var url2 = "https://jsonplaceholder.typicode.com/users/2";

/* 
$.get(url1).done(function (result1) {
	console.log(result1);
});
*/

$.when(
  $.get(url1),
  $.get(url2)
).then(function(result1, result2) {
  console.log("result1");
  console.log(result1[0]);

  console.log("result2");
  console.log(result2[0]);

  someCode();
});

function someCode() {
  console.log("someCode here");
}

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
&#13;
&#13;
&#13;