有没有办法确定ajax调用是否在无限循环中执行

时间:2016-09-08 06:33:13

标签: javascript jquery ajax

我们可以以编程方式识别ajax调用是否在无限循环中执行。

发生这样的事情时,它会返回任何特定的标题吗?我们可以通过响应中的标题来识别这种情况。

我有一组ajax调用并且已经处理了大部分事情,但仍然怀疑在某些情况下它可能会触发无限的ajax调用。

  

我创建了一组独立的HTTP请求的ajax调用。我通过发送另一个ajax call2来执行由ajax call1处理的记录的某些calulcation。

$.ajax({
    url:'<%= path1 %>',
    method:"POST",
    dataType: "script",
    data: {
        batch_id:<%= @id%>
    }
});

$.ajax({
    url:'<%= path2 %>',
    method:"POST",
    dataType: "script",
    data: {
        batch_id:<%= @id%>
    }
});

路径2 ajax调用依赖于路径1 ajax响应。因此,如果在path1 ajax调用响应或异常时没有正确设置某些varibales,它可能会触发不需要的行为或对path2的无限ajax调用,因为path1 ajax调用突然停止,所以无法理解它何时必须停止。

而不是超时是否有一种方法可以从头部恢复我可以识别呼叫是否无限循环,这样我就可以确定它不是一个长时间运行的请求而且需要中止< / p>

有人可以帮忙吗?

3 个答案:

答案 0 :(得分:3)

正确的方法是仅调用第二个ajax,并且仅在第一个成功时才调用。

function getdata() {
  var fileTransfer = new FileTransfer();
  var path = cordova.file.dataDirectory;
  jQuery.getJSON(MyJSONData, function(data) {
    var count = 0;
    jQuery.each(data, function(key, val) {
      fileTransfer.download(
        MyFileURL,
        path + "data/images/" + key + ".jpg",
        function(theFile) {
          console.log('Saved');
          count++;
          if (count == Object.keys(data).length) {
            console.log('Downloads finalized!');
          }
        }, null
      );
    });
  }).fail(function() {
    console.log('Error');
  });
}

编辑:如果您的http请求是独立的,您可以使用promise

var modalButton = {
    backgroundImage: 'url(' + x.image + ')'
}

答案 1 :(得分:0)

您可以使用$.when()

$.when( $.ajax( "firstajax" ) ).then(function( data, textStatus, jqXHR ) {
// append data or what ever and then  
//second ajax
});

一般规则是第一个ajax调用应该在第一个完成时完成。您可以这样做,或者只是在第一个成功方法中添加第二个ajax调用。

答案 2 :(得分:-1)

如果您的ajax呼叫2完全依赖于ajax呼叫1的成功,那么只有在1&#39; st ajax呼叫成功时才能执行您的2和ajax呼叫。使用成功方法:

$.ajax({
url:'<%= path1 %>',
method:"POST",
dataType: "script",
data: {
    batch_id:<%= @id%>
}
success : function (res){
          secondAjax();  // call a function on success
}
});



 function secondAjax(){
     $.ajax({
      url:'<%= path2 %>',
      method:"POST",
      dataType: "script",
      data: {
        batch_id:<%= @id%>
      }
      success : function(res){
         alert('both ajax called successfully.');
      }
     });
 }