2015-07-08 2 views
-1

Я пытаюсь сделать кучу вызовов для добавления пользовательских событий в API Google, лимит в API - 10 запросов в секунду, я пытаюсь добавить setInterval для ограничения этих вызовов, по какой-то причине это огонь все сразу, это мой тест функции:setInterval внутри a for in loop fire немедленно

function getGUIDS(){ 
$.ajax({ 
    url : 'google_api_url_with_params', 
    type : 'get', 
    success : function(data){ 
     for(var i in data.rows){ 
      rows[i] = data.rows[i]; 
      setInterval(function(x){ 
       console.log(data.rows[x][0]); 
      },1000,i); 
     } 
    }, 
    error: function(data){ 
     console.log("Error",data); 
    } 
}); 

}

кто-нибудь? большое спасибо!! :)

+1

Возможно, вы хотели написать '1000 * i' вместо' 1000, i'? –

+0

Кроме того, вы либо неправильно используете 'for ... in' в массиве, либо у вас есть объект, и в этом случае' i' не обязательно должен быть числом? – adeneo

+0

Было бы хорошо видеть, как выглядят ваши данные. – lshettyl

ответ

0

Попробуйте это:

function getGUIDS(){ 
$.ajax({ 
url : 'google_api_url_with_params', 
type : 'get', 
success : function(data){ 
    for(var i in data.rows){ 
     rows[i] = data.rows[i]; 
     setTimeout(function(x){ 
      console.log(data.rows[x][0]); 
     },i * 1000); 
    } 
}, 
error: function(data){ 
    console.log("Error",data); 
} 
}); 
} 
+0

Вы забыли пройти параметр paramTimeout. Вместо этого он должен быть}, i * 1000, i); –

+0

работает с одним и тем же помощником ... – benjah

+0

@ william.taylor.09 setTimeout выполняется только один раз, поэтому третий параметр не требуется. – Globala

1

Попробуйте настройке очереди заданий:

var photoidx=0; // sample: pictures from a free JSONP provider ... 
 
var stdJob={url : 'http://www.flickr.com/services/feeds/photos_public.gne?format=json&jsoncallback=?', 
 
     // format : 'json', // not really necessary 
 
     dataType:'jsonp', 
 
     success : function(d){ 
 
        $('#out').append('<img src="'+d.items[photoidx++].media.m+'">');}, 
 
     error: function(d){console.log("Error");} 
 
    };   // object describing the standard AJAX job in JSONP mode 
 
var jobs=[]; // job queue as a global variable 
 

 
function getGUIDS(){ // IMPORTANT: $.extend() clones the stdJob 
 
        // before it is pushed into the job queue. 
 
        // Without cloning all jobs would have the same data.tags! 
 
    jobs.push($.extend(true,{data:{tags: $('#topic').val()}},stdJob)); 
 
    // console.log(JSON.stringify(jobs[jobs.length-1])); 
 
} 
 
setInterval(function(){if (jobs.length) $.ajax(jobs.pop());},100) 
 

 
$(function(){ 
 
$('#newjob').click(getGUIDS); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
 
<a href=# id=newjob>add pic</a> for topic 
 
<input type="text" id="topic" value="Hannover"><br> <!-- my home town --> 
 
<div id="out"></div>

setGUIDS() поставит запрос для API в очереди заданий. Функция внутри функции setInterval() будет вызываться каждые 100 миллисекунд, а затем обрабатывать задание через $.ajax() соответственно. Это позволит убедиться, что API не будет вызываться более 10 раз в секунду.

Я немного изменил ваш пример, чтобы получить рабочий сценарий.

Чтобы выполнить межсайтовый вызов AJAX, вы должны использовать протокол JSONP вместо POST, так как большинство браузеров заблокируют его в противном случае.

+0

спасибо, что изменили много помощника !! не думал, что направление с толчком & поп вещь ... ура! :) – benjah