0

我有一个名为 index.php 的文件。使用脚本标签,它引用 index.js。

我还有一个名为 payment.php 的文件。使用脚本标签,它引用 payment.js。

我需要在 index.js 中设置一个名为 seatSelected 的变量,然后在 payment.js 中使用它。但是,我不想在 payment.php 中引用 index.js。

我试图制作一个名为 globals.js 的文件,在 index.php 之前的 index.js 中引用它,其中包含以下内容:

var selectedSeat;

function setSelectedSeat(seat){
    selectedSeat = seat;
}

function getSelectedSeat(){
    return selectedSeat;
}

并在 index.js 中设置值:

setSelectedSeat("test");

在payment.js中接收它(在payment.js上面的payment.php中引用globals.ks):

alert(getSelectedSeat());

但它会警告“未定义”。难道我做错了什么?如何在不引用它更改的文件的情况下引用这个变量?

4

2 回答 2

1

您不能访问从另一个页面创建的变量。

您可以使用localStoragewithcookies作为后备。

function setSelectedSeat(seat){
    if(localStorage) {
      localStorage['selectedSeat'] = JSON.stringify(seat);
    }
    else {
      //add code to store seat in cookie
    }
}

function getSelectedSeat(){
    if(localStorage) {
      return JSON.parse(localStorage['selectedSeat']);
    }
    else {
      //add code to retrive seat in cookie
    }
}
于 2013-07-03T18:53:53.223 回答
1

您试图在从一个页面转换到另一个页面时保持变量的状态,并且您的应用程序似乎有需要会话到期的数据,我建议您使用sessionstorage. 在 polyfill 的帮助下,您可以在浏览器sessionstorage之前提供支持。IE6

SessionStorage过度使用的好处LocalStorage

  • 会话存储仅保留特定选项卡/窗口的数据,关闭选项卡/窗口时数据会丢失。
  • 随着数据自动过期,您无需担心会话过期。
  • 您也可以根据自己的意愿使会话到期。
  • 数据在页面刷新时仍然存在。

但请记住,sessionstorage您只能存储字符串key-value模式。并且您需要使用JSON.stringifyJSON.parse方法将您的复杂对象存储在浏览器内存中。

在这里,您可以找到可用于在不支持的浏览器中提供会话存储支持的 polyfill 列表:https ://github.com/Modernizr/Modernizr/wiki/HTML5-Cross-Browser-Polyfills#web-storage-localstorage -and-sessionstorage

您也可以阅读以下文章以更好地理解sessionstorage和理解:http: //diveintohtml5.info/storage.htmllocalstorage

于 2013-07-03T19:08:49.353 回答