2010-10-20 29 views
2

J'ai un script qui s'exécute toutes les 5 secondes, en tant que requête http ajax d'interrogation.Tentative d'incrémentation d'un compteur javascript lors de l'utilisation des requêtes http ajax

Je veux envoyer un montant incrémentiel à travers elle, à chaque demande (1,2,3,4,5,6 etc ...)

J'ai ce jusqu'à présent, mais le code juste envoie ' 1 'à travers tout le temps. Est-ce que quelqu'un sait comment soumettre une valeur croissante à travers le paramètre 'data' dans le POST?

Répondre

0

Vous devez vous assurer que vous ne définissez pas le state.recordId encore et encore chaque fois que vous exécutez la fonction qui appelle la méthode .ajaxPoll(). state = ... devrait être dans un champ parent de la fonction qui fonctionne .ajaxPoll() peut-être quelque chose comme ceci:

(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 
0

probablement une copie de l'objet d'état est fermé à l'intérieur de la fonction anonyme qui commence toujours par sa valeur initiale à moins que les modifications sont apportées en dehors de la fermeture avant qu'il ne soit fermé/créé. Pour la vérification il suffit de remplacer cette ligne incrémentale avec suivante

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

Vous trouverez une introduction très basique aux fermetures ici http://msdn.microsoft.com/en-us/magazine/cc163419.aspx

Pouvez-vous passer objet d'état comme une variable à successCondition fonction anonyme? De cette façon, vous obtiendrez toujours la copie réelle

0

Vous pouvez également définir une variable de données pour le document ou le corps et l'incrémenter.

$('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')); 
    } 
});