Попытка увеличить счетчик JavaScript при использовании опроса HTTP-запросов AJAX. - PullRequest
2 голосов
/ 21 октября 2010

У меня есть скрипт, который запускается каждые 5 секунд, как HTTP-запрос ajax для опроса.

Я хочу отправлять увеличивающуюся сумму через него для каждого запроса (1,2,3,4,5), 6 и т. Д.)

У меня пока это есть, но код просто все время посылает '1'.

// set the value to 1
   var state = {
    recordId: 1
   };

  $.ajaxPoll({
      url: "map-service.cfc?method=getpoints",
      type: "POST",
            data: state,
      dataType: "json",
      successCondition: function(location) {
         // return result != null; // custom condition goes here.

   // increment it by 1
   state.recordId = state.recordId +1 
   alert(state.recordId)

}

Кто-нибудь знает, как передать возрастающее значениечерез параметр data в POST?

Ответы [ 3 ]

0 голосов
/ 21 октября 2010

Вероятно, копия объекта состояния закрыта внутри анонимной функции, которая всегда будет начинаться с ее начального значения, если только изменения не внесены за пределы замыкания до его закрытия / создания.Для проверки просто замените эту инкрементную строку следующей

window.recordId = window.recordId + 1 // Making it global variable 

Здесь вы найдете очень простое введение в замыкания http://msdn.microsoft.com/en-us/magazine/cc163419.aspx

Можете ли вы передать объект состояния в качестве переменной анонимной функции successCondition?Таким образом, вы всегда получите актуальную копию

0 голосов
/ 21 октября 2010

Вы также можете установить переменную данных для документа или тела и увеличивать ее.

$('body').data('recordId', 1);

$.ajaxPoll({
   url: "map-service.cfc?method=getpoints",
   type: "POST",
   data: {recordId: $('body').data('recordId')},
   dataType: "json",
   successCondition: function(location) {
     // return result != null; // custom condition goes here.
     // increment it by 1
     newRecord = $('body').data('recordId');
     $('body').data('recordId', newRecord+1);
      alert($('body').data('recordId'));
   }
});
0 голосов
/ 21 октября 2010

Вы должны убедиться, что не устанавливаете state.recordId снова и снова каждый раз, когда выполняете функцию, которая вызывает метод .ajaxPoll(). state = ... должен находиться в родительской области функции, которая запускает .ajaxPoll(), может быть что-то вроде этого:

(function() {        // <== Our scope

    // set the value to 1 only once!
    var state = {
        recordId: 1
    };

    // The function that runs the poll. Do not set recordId to 1 inside here!
    var callPoll = function() {

        $.ajaxPoll({
            url: "map-service.cfc?method=getpoints",
            type: "POST",
                data: state,               // state.recordId will be 1, 2, 3, ...
            dataType: "json",
            successCondition: function(location) {
                // return result != null;          // custom condition goes here.

                // increment it by 1
                state.recordId = state.recordId +1 
                alert(state.recordId)
            }
         });

    };

    $(function() {  // <== on doc ready 

        // Your functionality etc...... for example:
        setInterval(callPoll, 1000);

    });    
}());              // <== Execute the anonymous function we're using as our scope
...