Javascript 函数中的全局变量值不为';t更新

Javascript 函数中的全局变量值不为';t更新,javascript,jquery,jquery-file-upload,blueimp,Javascript,Jquery,Jquery File Upload,Blueimp,我正在使用,并将其配置为: jQuery(document).ready(function() { jQuery("#fileupload").fileupload({ dataType: "json", url: "ajax_handler.php?globalVar=" + globalVar, send: function (e, data) { }, done: function (e, data) { } }); .... 其

我正在使用,并将其配置为:

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
值(页面首次加载时的值)


为什么会发生这种情况?

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

  • 存储它并从cookie中检索if
  • 存储它并从LocalStorage检索它
  • 在服务器上存储并检索它(可能使用AJAX)

  • 如果不需要将其存储在服务器上,则前两种方法更简单。该服务器的优点是,它甚至可以从其他计算机上获得。cookie和LocalStorage仅在该特定计算机上可用。

    创建文件上载小部件时,将向其传递一个配置对象。此对象有许多属性,其中包括
    url

    属性值在创建对象时进行计算(在您的示例中,是在
    $(document).ready()中创建文件上载小部件时)。对象不知道
    globalVar
    变量,因为分配了以下值:

    "ajax_handler.php?globalVar=" + globalVar
    
    计算为一个简单字符串(您没有向它传递对
    globalVar
    或类似内容的引用)。只有将函数分配给引用
    globalVar
    url
    属性时,才会出现您期望的行为(我不知道文件上载插件是否支持此功能)


    因此,即使您稍后更改
    globalVar
    ,文件上传小部件的url配置选项也将保持不变。若要更改它,需要再次显式分配。

    变量是上下文窗口的全局变量,每个页面都有自己的上下文。这是您的问题吗?您如何声明和设置
    globalVar
    ?@A.Wolff它是由PHP返回到页面的。我想知道这个问题是否与传递给fileupload()的数据是一个对象这一事实有关(是吗?)。比如,对象中的变量和函数在传递时只计算一次,而不是在调用函数时?我还添加了一个指向我正在使用的插件的链接。问题似乎与插件无关,而是如何设置和更新globalVar值。我还是不知道你是怎么做到的?!注意,只有在创建文件上载时将url属性设置为字符串时,才会计算页面上的php变量;之后你对globalVar所做的任何事情都不会影响url属性我不确定你的意思--页面不会改变?文件上传插件是一个AJAX函数。@你确定没有重新加载页面吗?你在使用哪个插件?@Nate-如果页面URL根本没有改变,那么可能你的globalVar没有声明为全局变量。如果它是全局的,它将在特定页面的生存期内保留其值。因此,要么它不是全局的,要么重新加载一个新页面,要么您的一些代码正在更改变量的值。这些就是选择。非常感谢你,这很有道理!