2016-09-03 4 views
-2

У меня есть глобальная переменная с именем calculated_price, которая содержит цену выбранного продукта. Изменить значение этой глобальной переменной с функцией, а затем с помощью другой функции я представить его на сервер с запросом AJAX сообщение:Javascript не может получить доступ к глобальной переменной

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); 

     }); 

    } 
} 

Я использую Framework7, поэтому рамки JS я использую Dom7 , однако это очень похоже на jQuery и функцию $$. post, с которой я все время работаю. Он просто не может получить доступ к calculated_price variable. Я не обновлял эту переменную где-либо в своем коде (нигде я не поставил перед ним var, кроме тех случаев, когда он объявлен глобально). Любая идея, почему эта переменная теряется до последней функции (submitOrder)? Я знаю, что переменная существует и имеет значение, потому что в функции calculatePrice я ставлю расчетную цену внутри элемента HTML, и она правильно показывает цену.

+0

Для чего у вас нет доступа? Вы получили сообщение об ошибке? Какая строка выдает ошибку? И т. Д. – Utkanos

+0

У вас проблема с 'if (calculate_price! == null || calculate_price! == '')': это должно быть 'if (calculate_price! == null && calculate_price! == '')' –

+0

@Utkanos Нет ошибки, иначе я ее уже исправил. Он просто ничего не возвращает. Я предупреждаю calc_price внутри функции submitOrder, и он просто полностью пуст. Нет ошибки или чего-то еще. –

ответ

4

Вы объявляете calculated_price глобально, а затем вы используете то же имя, что и параметр функции.

var calculated_price; 

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

Это две разные переменные. Когда вы вызываете submitOrder, вы отправляете calc_price в качестве параметра?

+0

Так вот что случилось? –

+0

это две разные переменные. Когда вы вызываете submitOrder, вы отправляете calc_price в качестве параметра? – Robert

+0

Ахх, я вижу сейчас. Я изменил имя переменной параметра функции, и теперь она работает. Спасибо приятель! –

1

Ваш код выглядит нормально для линии

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

Вы, наверное, хотели сказать

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

Из-за того, что, когда функцию submitOrder называется исключением, запрос Аякса будет выполнен, даже если calculated_price не определено.

+0

Это решает проблему глобальных переменных как? –

+1

Это не так. Но я подозреваю, что функция 'submitOrder' вызывается до инициализации' calculate_price', а затем проверка в условном выражении истинна и неправильный запрос ajax идет ot. Тогда ОП думает, что это из-за проблемы глобальных переменных. Я думаю, что это действительная теория. – redneb

Смежные вопросы