函数中的全局变量值不会更新

时间:2014-01-04 17:21:14

标签: javascript jquery jquery-file-upload blueimp

我正在使用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 make具有原始globalVar值(首次加载页面时的值)。

为什么会这样?

2 个答案:

答案 0 :(得分:2)

创建文件上载窗口小部件时,您将向其传递配置对象。该对象具有许多属性,其中包括url

在创建对象时评估属性值(在$(document).ready()中创建文件上载小部件时)。自分配的值以来,对象不知道globalVar变量:

"ajax_handler.php?globalVar=" + globalVar

计算为一个简单的字符串(你没有将它传递给globalVar或类似的东西)。如果您将函数分配给引用url的{​​{1}}属性(我不知道文件上传插件是否支持此功能),那么您似乎期望的行为才会发生。 / p>

因此,即使您稍后更改globalVar,文件上传小部件的网址配置选项也将保持不变。如果要更改它,则需要再次明确指定它。

答案 1 :(得分:0)

如果您希望变量值从一个页面持久存储到另一个页面,则必须将该值存储在某个位置,然后从另一个页面检索它。 Javascript变量是页面的本地变量,因此每次进入新页面时都会清除整个javascript状态。存储/检索变量的选项是:

  1. 存储并从Cookie中检索
  2. 存储并从LocalStorage
  3. 检索它
  4. 将其存储并在您的服务器上检索(可能使用AJAX)
  5. 如果您不需要将它存储在服务器上,前两个更简单。服务器的优点是它甚至可以从其他计算机上获得。 Cookie和LocalStorage仅在该特定计算机上可用。