【问题标题】:JQuery: Wait till one GET request completedJQuery:等到一个 GET 请求完成
【发布时间】:2014-07-14 19:58:11
【问题描述】:

我需要应用程序等到第一个请求完成。场景是,

if (str != "") {
  if (str.match(",")) {
        var poolSequencedStatus = $.get("Request1.do"), function(response){
             //alert("Req1")
        }
  }

  $.get("Request2.do"), function(response){
     //alert("Req2")
  }
}

如果字符串包含字符',',则只有在完成 Request1 后才应调用 Request2。

【问题讨论】:

  • 调用第二个.get成功的第一个.get

标签: jquery wait get-request


【解决方案1】:

您可以利用 Promise 并将其包装在 $.when($.get("Request1.do")).then(function(){});

http://api.jquery.com/jquery.when/

【讨论】:

    【解决方案2】:

    创建第二个请求的函数:

    function GetRequest()
    {
    
     $.get("Request2.do"), function(response){
         //alert("Req2")
      }
    
    }
    

    并调用第一个成功:

    if (str != "") {
      if (str.match(",")) {
            var poolSequencedStatus = $.get("Request1.do"), function(response){
                 GetRequest();
            }
      }
    

    【讨论】:

    • 如果你想要更简洁的代码,至少你可以摆脱匿名函数包装器并执行$.get( "Request1.do", GetRequest );
    【解决方案3】:
    if (str != "") {
      if (str.match(",")) {
            var poolSequencedStatus = $.get("Request1.do"), function(response){
                 //alert("Req1");
               $.get("Request2.do"), function(response){
         //alert("Req2")
               }
            }
      }
    
    
    }
    

    【讨论】:

      【解决方案4】:

      默认情况下,Jquery 在同步模式下工作。

      检查 $.ajax 设置的 async:false 值。

      否则,您可以在最新的 jQuery 中使用 $.when() 的好处。

          // Using the $.when() method, we can create an object that behaves similarly
      // to Deferred objects, but for COMBINATIONS of Deferred objects.
      //
      // The $.when() method creates a Deferred object that is resolved or rejected
      // when all the Deferred objects passed into it are resolved or rejected.
      var getPromise = function(name) {
        var dfd = $.Deferred();
        var num = Math.floor(Math.random() * 1000);
        setTimeout(function() { dfd.resolve(name + ": " + num); }, num);
        return dfd.promise();
      };
      
      var list = $("<ul/>").appendTo($("#target").empty());
      var printLine = function(str) {
        $("<li class=well/>").html(str).appendTo(list);
      };
      
      // Each of these Promises will individually print when resolved.
      var promiseA = getPromise("A").done(printLine);
      var promiseB = getPromise("B").done(printLine);
      var promiseC = getPromise("C").done(printLine);
      
      // And this code will execute once all Promises have resolved.
      $.when(promiseA, promiseB, promiseC).then(function(numA, numB, numC) {
        printLine(numA + ", " + numB + ", " + numC);
      });
      

      【讨论】:

        猜你喜欢
        • 2021-09-01
        • 1970-01-01
        • 2012-04-11
        • 2020-03-17
        • 1970-01-01
        相关资源
        最近更新 更多