使用键+值填充javascript数组

时间:2014-05-20 10:00:45

标签: javascript jquery html

我正在开发一个使用html / javascript框架的应用。 当页面显示如下时,应用程序使用PHP脚本和$ .get调用从数据库的页面加载:

    // Set lastTime var for counting the amount of time passed since $.get
    var lastTime = 0;

    // Amount of minutes before new $.get
    var timeOut = 1;

    // Cache
    var cache = [];

    function load_page(page, location) {
        // Check if 1 minute passed
        if ( Math.floor((new Date() - lastTime)/60000) < timeOut ) {
            // Get cache
            $(location+' .homeText').html(cache[page]);
        } else {
            // Get URL
            $.get('http://mydomain.com/get_posts.php?page='+page, function(data) {          
                $(location+' .homeText').html(data);
            });

            // Fill array with data
            cache.push();

            // Set lastTime var for checking how long since URL fetch
            lastTime = new Date();
        }
    }

它已接近完成但我无法弄清楚如何填充我的cache变量。 我希望以这样的方式填充它,以便我可以使用page变量作为关键来保持一切尽可能动态。我知道如何用数据填充数组,但我无法弄清楚如何给它一个特定的键和值。

4 个答案:

答案 0 :(得分:2)

像这样的东西

var cache = {};

从缓存中获取

if (cache[page] !== undefined) {...

填充缓存

cache[page] = data;

答案 1 :(得分:1)

在Javascript中,大多数人会使用一个简单的Object来模仿关联数组的行为。

首先,将您的cache定义更改为空对象:

// Cache
var cache = {};

然后,当您想保存加载的HTML时,只需执行以下操作:

cache[page] = data;

现在,虽然您没有指定,但我认为您的逻辑中也有一个错误 - 您只有一个lastTime变量,但我认为您将分别为每个保留1分钟的计时器潜在的页面加载。在这种情况下,你可能会有更像这样的东西:

cache[page] = {
  html: data,
  expires: new Date().getTime() + 60000
};

为了说清楚,以下是我如何重写您的功能片段,使用cache对象来存储HTML数据和数据到期的时间。

// Cache
var cache = [];

function load_page(page, location) {
  var now = new Date().getTime();

  // Check for a previously cached value
  var result = cache[page];

  if (result && result.expires > now) {
    // Use the cached HTML data
    $(location + ' .homeText').html(result.data);
  } else {
    // Get URL
    $.get('http://mydomain.com/get_posts.php?page=' + page, function (data) {
      $(location + ' .homeText').html(data);

      // Store the HTML and its expiration time
      cache[page] = {
        data: data,
        expires: now + 60000
      };
    });
  }
}

答案 2 :(得分:0)

JavaScript中没有关联数组这样的东西。 Here是一篇关于此问题的有趣博文:http://blog.kevinchisholm.com/...

但你可以这样想:

cache.push({键:值,键:值});

答案 3 :(得分:0)

或者,如果由于任何原因您必须使用数组cache,那么您将使用以下内容:

// Set lastTime var for counting the amount of time passed since $.get
var lastTime = 0;

// Amount of minutes before new $.get
var timeOut = 1;

// Cache
var cache = [];

function load_page(page, location) {
    // Check if 1 minute passed
    if ( Math.floor((new Date() - lastTime)/60000) < timeOut ) {
        // Get cache
        $(location+' .homeText').html(cache[page]);
    } else {
        // Get URL
        $.get('http://mydomain.com/get_posts.php?page='+page, function(data) {          
            $(location+' .homeText').html(data);

            // Fill array with data
            var oPage = {};
            oPage[ page ] = data;
            cache.push( oPage );

            // Set lastTime var for checking how long since URL fetch
            lastTime = new Date();

        });
    }
}