2013-07-16 4 views
0

Je crée un plugin jquery. En ce que j'utilise un peu de variablse globale $.rmtableparams.recordsCount: 0 est l'un d'entre eux.Variables globales dans le plugin jQuery

Certaines valeurs sont attribuées à cette fonction inside an ajax call.

callAjax = function (surl, pselector, pi, rec) { 
$.ajax({ 
.. 
    success: function (data) { 
      $.rmtableparams.recordsCount =10; 
    } 
    }); 
    } 

Mais pendant que je suis en train d'accéder $.rmtableparams.recordsCount dans une autre fonction, il renvoie 0. Mais chose étrange est que si i alert anything avant que it will returns 10 correctement.

Ie: si mon script est

alert("hi"); 
alert($.rmtableparams.recordsCount); 

La seconde alerte montre 10

Mais si seulement alert($.rmtableparams.recordsCount); est là, il retourne 0

je me demande avec cela. Si quelqu'un connaît la raison, aidez-moi s'il vous plaît.

+0

Où est déclaré '$ .rmtableparams.recordsCount'? – Broxzier

Répondre

3

L'affectation $.rmtableparams.recordsCount =10; fait partie du rappel success d'une demande $.ajax. La valeur n'est donc pas affectée tant que l'appel ajax n'est pas terminé et qu'une réponse est reçue. Cela arrive assez rapidement, donc pendant que vous êtes d'abord alert attend d'être fermé, la réponse ajax est reçue, et l'affectation est traitée. Ensuite, la deuxième alerte montre la nouvelle valeur.

Si vous omettez la première alerte, l'appel est toujours en cours de traitement et la valeur $.rmtableparams.recordsCount n'a pas encore été modifiée.
C'est aussi simple que cela: AJAX est synonyme de JavaScript asynchrone et XML. Async est la clé, mais souvent négligée ...

+0

+1 Bonne Pensée – Shawn31313

+0

oui. J'ai essayé avec 'async: false,' dans un appel ajax. Ensuite, cela fonctionne bien. – Nithesh

+0

est-ce que cela rend n'importe quel problème pour faire la requête 'synchrone' comme je l'ai fait avec' async: false' ??? – Nithesh

0

Vous ne pouvez pas simplement aller de l'avant et définir $.rmtableparams.recordsCount car $.rmtableparams n'existe pas.

Vous devez d'abord définir $.rmtableparams:

$.rmtableparams = {}; 

Ensuite, vous allez-y et ajoutez des données à l'objet:

$.rmtableparams.recordsCount = 10; 

Assurez-vous que le rappel de succès est tiré. Ajoutez un alert ou console.log dans le rappel pour effectuer la vérification.

+0

l'a déjà fait. '$ .rmtableparams = { recordsCount: 0 };' – Nithesh

+0

Hmm, d'accord. Laisse-moi penser. – Shawn31313

+0

Assurez-vous que le rappel de succès est appelé. Et vérifiez les erreurs dans une console. – Shawn31313