如何使用Javascript逐个加载URL

时间:2017-01-14 11:46:36

标签: javascript jquery ajax

如何通过javascript ajax或jquery从数组中逐个触摸url?因为如果你一触摸触摸大进程的php就会超时,那么如何逐个处理?

实施例

select group_concat(concat('date:',DATE,':',RESOURCE_NAME,':',MARKS)
 separator ' , ' )from mytable group by DATE order by DATE desc;

可能是如果grape.php完成,然后在苹果旁边,如果苹果完成,然后是橙色。

然后如果所有过程都完成,则显示警报成功。

2 个答案:

答案 0 :(得分:0)

你是说这个?

var myurls = [
"http://example.com/grape.php",
"http://example.com/apple.php",
"http://example.com/orange.php",
"http://example.com/banana.php"],cnt=0;
function process(data) {
  console.log(data);
}
function loadUrl() {
  if (cnt>=myurls.length) return;
  $.get(myurls[cnt++],function(data) {
    process(data);
    loadUrl();
  });
}
$(function() {
  loadUrl();
})

答案 1 :(得分:0)

根据您的问题以及我们在您的评论中进行的讨论,我认为您希望根据您拥有的一系列网址执行AJAX调用顺序

解决方案1:使用重复的自引用$.ajax()请求

这无疑是更容易解决的问题。我们在这里得到的是我们跟踪我们所在数组的位置,并在迭代数组时停止发出AJAX请求。



$(function() {

  // Array of URLs
  var myurls = [
    "https://jsonplaceholder.typicode.com/posts/1",
    "https://jsonplaceholder.typicode.com/posts/2",
    "https://jsonplaceholder.typicode.com/posts/3",
    "https://jsonplaceholder.typicode.com/posts/4"
  ];

  // Iterate through array, and keep a cursor on which item we are at
  var urlCount = 0,
    ajaxCall = function() {
      if (urlCount < myurls.length) {
        console.log('Making AJAX call to url: '+myurls[urlCount]);
        $.ajax({
            url: myurls[urlCount]
          })
          .done(function(returnedData) {
            console.log(returnedData);
            urlCount++;
            ajaxCall();
          });
      }
    };

  ajaxCall();

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

解决方案2:使用for循环

使用.then()链接设置

对于您的用例,我有adapted the code provided in this answer,因为对于那些不熟悉延迟对象和返回承诺的人来说,这个例子很难理解。

所以诀窍如下:

  1. 设置主延期对象
  2. 设置一个将为您调用AJAX的常规函数​​
  3. 循环遍历数组,使用.then()
  4. 链接它们
  5. 在主延迟对象上启动第一个AJAX调用
  6. &#13;
    &#13;
    $(function() {
    
      // Array of URLs
      var myurls = [
        "https://jsonplaceholder.typicode.com/posts/1",
        "https://jsonplaceholder.typicode.com/posts/2",
        "https://jsonplaceholder.typicode.com/posts/3",
        "https://jsonplaceholder.typicode.com/posts/4"
      ];
    
      // Set up chain of AJAX requests
      var d = $.Deferred(),
        _d = d,
        ajaxRequest = function(ajaxUrl) {
          // Log in browser console that AJAX call is being made
          console.log('Making AJAX call to: ' + ajaxUrl);
    
          // Return deferred object for .then() chaining
          return $.ajax({
            url: ajaxUrl
          });
        };
    
      // We chain each AJAX call to the next one
      for (var i in myurls) {
        // Use IIFE so that reference to `i` is fixed
        (function(j) {
          // Update _d for chaining
          _d = _d.then(function() {
            // The _request is a defered object returned
            // So we can chain deferred methods such as .done()
            var _request = ajaxRequest(myurls[j]).done(function(ajaxData) {
              // Just to show that data is being returned after each call
              console.log(ajaxData);
            });
            
            // Return the deferred object for chaining
            return _request;
          });
        })(i);
      }
    
      // Kick start sequential ajax call
      d.resolve();
    });
    &#13;
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    &#13;
    &#13;
    &#13;