2016-09-03 4 views
-2

J'ai une variable globale appelée calculated_price, qui contient le prix d'un produit sélectionné. Je change la valeur de cette variable globale avec une fonction, puis avec une autre fonction que je soumets à un serveur avec une demande de poste AJAX:Javascript ne peut pas accéder à la variable globale

var calculated_price; 

function calculatePrice() { 
    calculated_price = $$('.myInput').val(); 
    $$('.price-holder').text(calculated_price); 
} 

function submitOrder(calculated_price) { 
    if(calculated_price !== null || calculated_price !== '') { 

     $$.post('http://www.example.com/payment.php', { price: calculated_price}, 
     function(data) { 

      alert('Data: ' + data); 

     }); 

    } 
} 

J'utilise Framework7, de sorte que le cadre JS J'utilise est DOM7 , mais c'est très similaire à jQuery et la fonction $$. post que j'utilise a toujours fonctionné jusqu'ici. Il ne semble pas pouvoir accéder au calculated_price variable. Je n'ai pas redéclaré cette variable n'importe où dans mon code (nulle part j'ai mis var devant elle sauf quand elle est déclarée globalement). Une idée de pourquoi cette variable est perdue jusqu'à ce que la dernière fonction soit exécutée (submitOrder)? Je sais que la variable existe et a de la valeur, car dans la fonction calculatePrice, j'ai mis le prix calculé dans un élément HTML et il affiche le prix correctement.

+0

Que voulez-vous dire par ne peut pas accéder? Vous obtenez une erreur? Quelle ligne jette l'erreur? Etc. – Utkanos

+0

Vous avez un problème avec 'if (calculation_price! == null || calculate_price! == '')': cela devrait être 'if (calculation_price! == null && calculate_price! == '')' –

+0

@Utkanos Il n'y a pas d'erreur, sinon je l'avais déjà réparé. Cela ne renvoie rien. J'alerte le calculate_price dans la fonction submitOrder et il est complètement vide. Aucune erreur ou quoi que ce soit. –

Répondre

4

Vous déclarez globalement calculated_price, puis vous utilisez le même nom qu'un paramètre de fonction.

var calculated_price; 

function submitOrder(calculated_price) { <---- error is here 

Ce sont 2 variables différentes. Lorsque vous appelez submitOrder, envoyez-vous calculate_price en tant que paramètre?

+0

Alors, qu'est-ce qui ne va pas? –

+0

ce sont 2 variables différentes. Lorsque vous appelez submitOrder, envoyez-vous calculate_price en tant que paramètre? – Robert

+0

Ahhh, je vois maintenant. J'ai changé le nom de la variable de paramètre de fonction et maintenant cela fonctionne. Merci mec! –

1

Votre code semble bien à l'exception de la ligne

if(calculated_price !== null || calculated_price !== '') { 

Vous avez probablement voulu dire

if(calculated_price !== null && calculated_price !== '') { 

À cause de cela, lorsque la fonction submitOrder est appelée, la demande ajax sera effectuée, même si calculated_price est indéfini.

+0

Cela résout le problème variable globale comment? –

+1

Ce n'est pas le cas. Mais je soupçonne que la fonction 'submitOrder' est appelée avant que' calculate_price' soit initialisé et que le test dans le conditionnel soit vrai et qu'une fausse requête ajax disparaisse. Ensuite, le PO pense que c'est à cause d'un problème de variable globale. Je pense que c'est une théorie valable. – redneb