0

for ループから抜け出すのに問題があります。

現在、ループはすべてのページで jQuery getJSON 呼び出しを実行しています。ページにデータがある場合、すべての項目がログに記録されます。ページにデータがない場合、ループは完全に停止します。

ただし、これを実行するたびに、100 ページすべてをループします。データのないページにヒットすると、「このページにはコンテンツがありません」と記録されますが、for ループは引き続き実行されます。(したがって、コンソールで「このページにはコンテンツがありません」という無限のストリームが発生します)

私は何を間違っていますか?

i = NOTANINTEGERループを止めるために an を投げるのを避けたい

for (var i=0; i< 100; i++)
  {
    var breakForLoop = false;
    var API = "http://www.foo.com/bar.json?page=" + i;

    $.getJSON(API,  function(data) {
      var items = {};
      // logs items from page run only when the page has data
      if (data.length > 0) {
        $.each( data, function(i, item) {
          console.log(item.text);
        });
      }
      // the page has no data, therefore remainder pages have no data too
      else {
        console.log("this page has no content");
        breakForLoop = true;
        return;
      }
    });

   if (breakForLoop) {
       break;
   }
}
4

1 に答える 1

3

考えられる解決策の1つは、次のようなものを使用することです

//this method tries to fetch data from page `x`, if there is data in the current page then it will again try to fetch data from page `x + 1`
function fetchData(page) {
    page = page || 0;
    var API = "http://www.foo.com/bar.json?page=" + page;

    $.getJSON(API, function (data) {
        var items = {};
        // logs items from page run only when the page has data
        if (data.length > 0) {
            $.each(data, function (i, item) {
                console.log(item.text);
            });
            //since there is data in the current page try to fetch data from page page + 1
            fetchData(page + 1);
        }
        // the page has no data, therefore remainder pages have no data too
        else {
            console.log("this page has no content");
        }
    });
}

//initiage fetching data
fetchData(0) ;
于 2013-11-03T16:49:16.503 に答える