2014-01-04 7 views
0

Я использую the jQuery fileupload plugin и настроить его так:глобальной переменной значение функции не обновляет

jQuery(document).ready(function() { 
    jQuery("#fileupload").fileupload({ 
    dataType: "json", 
    url: "ajax_handler.php?globalVar=" + globalVar, 
    send: function (e, data) { 

    }, 
    done: function (e, data) { 

    } 
}); 

.... 

globalVar Где это (вдумайтесь) глобальная переменная.

Проблема заключается в том, что если я изменю значение globalVar, а затем сделаю загрузку файла (используя плагин загрузки файла jQuery, который является AJAX, так что страница не изменяется), URL-адрес, к которому выполняется запрос, имеет исходное значение globalVar (которое оно имело при первой загрузке страницы).

Почему это происходит?

+0

переменные являются глобальными для контекстного окна, и каждая страница имеет свой собственный контекст. Это ваша проблема? –

+0

Как вы объявляете и устанавливаете 'globalVar'? –

+0

@ A.Wolff Это echo'd из PHP на страницу. Мне было интересно, может ли эта проблема иметь какое-то отношение к тому факту, что данные, передаваемые в fileupload(), являются объектами (это правильно?). Как, может быть, переменные и функции внутри объекта оцениваются один раз, когда они передаются, а не когда вызывается функция? Я также добавил ссылку на плагин, который я использую. – Nate

ответ

2

Когда вы создаете виджет загрузки файлов, вы передаете ему объект конфигурации. Этот объект имеет ряд свойств, среди которых url.

Значения свойств оцениваются при создании объекта (в вашем случае, когда вы создаете виджет загрузки файлов в $(document).ready()). Объект не имеет никакого знания переменной globalVar поскольку значение, которое присваивается:

"ajax_handler.php?globalVar=" + globalVar 

оценивает в виде простой строки (вы не передавая ему ссылку на globalVar или что-нибудь подобное). Поведение, которое вы ожидаете, может произойти только в том случае, если вы назначили функцию для свойства url, в котором вы ссылаетесь globalVar (я не знаю, поддерживает ли плагин для загрузки файлов).

Так что, даже если вы измените globalVar на более поздний срок, параметр настройки URL-адреса для добавления файла останется неизменным. Если вы хотите изменить его, вам нужно явно назначить его снова.

+0

Большое вам спасибо, что имеет смысл! – Nate

0

Если вы хотите, чтобы значение переменной сохранялось с одной страницы на другую, вы должны где-то сохранить это значение и затем извлечь его с другой страницы. Переменные Javascript являются локальными для страницы, поэтому все состояние javascript очищается каждый раз, когда вы переходите на новую страницу. Варианты для хранения/извлечения переменной являются:

  1. Хранить его и получить, если из печенья
  2. хранить его и извлечь его из LocalStorage
  3. хранить его и получить его на сервере (возможно, с использованием AJAX)

Первые два являются более простыми, если они не нуждаются в нем, хранящемся на сервере. Преимущество сервера заключается в том, что он может быть доступен даже с других компьютеров. Файлы cookie и LocalStorage доступны только на этом компьютере.

+0

Я не уверен, что вы имеете в виду - страница не меняется? Плагин загрузки файлов - это функция AJAX. – Nate

+0

@Nate вы уверены, что страница не перезагружена? Какой именно плагин вы используете? –

+1

@Nate - Если URL страницы не изменяется вообще, то, возможно, ваш globalVar не объявляется глобальной переменной. Если он глобальный, он сохранит его значение для времени жизни конкретной страницы. Таким образом, либо он не является глобальным, либо перезагружается новая страница, либо часть вашего кода меняет значение переменной. Это варианты. – jfriend00