使用AJAX取后台数据,按要求每次应该返回的是不同的结果,但由于缓存,经常会出现两次取的数据重复的问题。特从网上寻觅解决方法:

  1、在服务端加 header(“Cache-Control: no-cache, must-revalidate”);

  2、在ajax发送请求前加上 anyAjaxObj.setRequestHeader(“If-Modified-Since”,”0″);

  3、在ajax发送请求前加上 anyAjaxObj.setRequestHeader(“Cache-Control”,”no-cache”);

  4、在 Ajax 的 URL 参数后加上 “?fresh=” + Math.random(); //当然这里参数 fresh 可以任意取了

  5、和第4种类似,只不过把参数换成时间。因为毕竟随机数还是存在重复的可能性,如果换成时间就不可能重复了。在 URL 参数后加上 “?timestamp=” + new Date().getTime();

  6、用POST替代GET:不推荐

  在Coding过程中经常会碰到用文件存储数组的情况,比如做缓存文件等等等等。下面总结下文件存储数组的三种常用方法。

  一、return array


<?php //存储数组的文件array.php 
return Array ( 
    "db_host1" => 123,
     "db_host2" => 123, 
    "db_host3" => 123,
     "db_host4" => 123,
     "db_host5" => 123,
     "db_host6" => 123,
     "db_host7" => 123,
     "db_host8" => 123,
     "db_host9" => 123,
     "db_host10" => 123,
     "db_host11" => 123,
     "db_host12" => 123,
     "db_host13" => 123,
     "db_host14" => 123,
     "db_host15" => 123,
     "db_host16" => 123 );
 ?>

使用进直接require ‘array.php’ 即可:


<?
$file = './arr.php';
$arr  = require $file;
?>

  二、序列化

<?php
//存储数组的文件ser.php
return
'a:16:{s:8:"db_host1";s:3:"123";s:8:"db_host2";s:3:"123";s:8:"db_host3";s:3:"123";s:8:"db_host4";s:3:"123";s:8:"db_host5";s:3:"123";s:8:"db_host6";s:3:"123";s:8:"db_host7";s:3:"123";s:8:"db_host8";s:3:"123";s:8:"db_host9";s:3:"123";s:9:"db_host10";s:3:"123";s:9:"db_host11";s:3:"123";s:9:"db_host12";s:3:"123";s:9:"db_host13";s:3:"123";s:9:"db_host14";s:3:"123";s:9:"db_host15";s:3:"123";s:9:"db_host16";s:3:"123";}';
?>

调用后对文件进行反序列化即可得到数组:


<?
$file = './ser.php';
$arr  = unserialize(require $file);
?>

三、存为ini配置文件形式

  先举个例子:文件名ini.php


<?php 
exit;
?>
db_host1 =123
db_host2 =123
db_host3 =123
db_host4 =123
db_host5 =123
db_host6 =123
db_host7 =123
db_host8 =123 
db_host9 =123
db_host10 =123
db_host11 =123
db_host12 =123
db_host13 =123
db_host14 =123
db_host15 =123
db_host16 =123

  用parse_ini_file直接对文件进行解析即可得到数组:


<?
$file = './ini.php';
$arr  = parse_ini_file($file2);
?>

  上面介绍的ini配置文件的写法只是最简单的形式,想看精彩的写法请看php.ini 🙂 ,可以在ini文件中加注释、可以使其返回的数组为二维数组。

  

  总结下上面三种方法,经测试在效率上差别不是很大;当数组是一维的情况下本人更喜欢用ini的形式——直观;如果要求返回的数组较复杂的话ini形式就不太适应,可以用return array形式或序列化。

  ECSHOP的缓存存放在templates/caches/文章夹下,时间长了这个文件夹就会非常庞大,拖慢网站速度。还有很多情况我们不需要他的缓存。本文介绍禁用ECSHOP缓存的方法。

  ECSHOP的缓存有两部分,一部分是SMARTY的页面缓存;另一部分是SQL查询结果的缓存。这两部分都是保存在templates/caches/文件夹下。只要我们分别关闭这两个功能,就可以完全禁用ECSHOP的缓存。当然你也可以根据自己的需要关闭其中某一个。

  1.关闭SMARTY的缓存:
  打开includes/cls_template.php,找到下面一段

  if (file_put_contents($this->cache_dir . ‘/’ . $cachename . ‘.php’, ‘<?php exit;?>’ . $data . $out) === false)
       {
           trigger_error(‘can’t write:’ . $this->cache_dir . ‘/’ . $cachename . ‘.php’);
       }

  将这一部分注释掉即可,改成

/*
  if (file_put_contents($this->cache_dir . ‘/’ . $cachename . ‘.php’, ‘<?php exit;?>’ . $data . $out) === false)
       {
           trigger_error(‘can’t write:’ . $this->cache_dir . ‘/’ . $cachename . ‘.php’);
       }
*/

  2.关闭SQL查询结果缓存
  打开includes/cls_mysql.php 
  找到
    var $max_cache_time=3600;//最大的缓存时间,以秒为单位
  改为
     var $max_cache_time=0;//最大的缓存时间,以秒为单位