禁止ajax缓存的方法(ASP/PHP/JSP/html/js)

 更新时间:2016年11月25日 15:39  点击:1514
禁止ajax缓存最简单的办法就是在js端直接生成一个随机数了,但是有时会发现此方法不适用于post了,如果我们要禁止post 提交数据的ajax缓存需要怎么处理呢,下面我整理了很多关于禁止ajax缓存的例子

ajax缓存有好处,但也有坏处,缓存有时候会导致误操作,影响用户体验,若你的WEB项目不需要ajax缓存功能,可按下述方法来禁止ajax缓存。

一、在ASP中禁止ajax缓存:

'放在ASP网页最开头部分

 代码如下 复制代码

Response.expires=0

Response.addHeader("pragma","no-cache")

Response.addHeader("Cache-Control","no-cache, must-revalidate")

二、在PHP中禁止Ajax缓存:

 代码如下 复制代码

//放在PHP网页开头部分

header("Expires: Thu, 01 Jan 1970 00:00:01 GMT");

header("Cache-Control: no-cache, must-revalidate");

header("Pragma: no-cache");

三、在JSp中禁止ajax缓存:

 

 代码如下 复制代码

//放在JSP网页最开头部分

response.addHeader("Cache-Control", "no-cache");

response.addHeader("Expires", "Thu, 01 Jan 1970 00:00:01 GMT");

四、通过给网页添加随机字符强制更新:如

 代码如下 复制代码

var url = 'http://url/';

url += '?temp=' + new Date().getTime();

url += '?temp=' + Math.random();

五、若是静态HTML,可添加HTTP headers头禁止缓存,比如:

 代码如下 复制代码

<meta http-equiv="pragma" content="no-cache" />

<meta http-equiv="Cache-Control" content="no-cache, must-revalidate" />

<meta http-equiv="expires" content="Thu, 01 Jan 1970 00:00:01 GMT" />

<meta http-equiv="expires" content="0" />

六、可以在XMLHttpRequest发送请求之前加上以下代码禁止ajax缓存:

 代码如下 复制代码

XMLHttpRequest.setRequestHeader("If-Modified-Since","0");
XMLHttpRequest.send(null);

七、jQuery ajax Load禁止

在jQuery提供一个防止ajax使用缓存的方法,把下面的语句加在head的javascript文件里,就可以解决问题。

 代码如下 复制代码

$.ajaxSetup ({
    cache: false //关闭AJAX相应的缓存
});


小结,不过现在都是使用jquery+ajax/" target="_blank">jquery ajax了我们如果不希望缓存可以直接设置 cache: false 这样可以解决post ,get等提交数据方式哦。

从下文中我们可以知道字符串比较除了可以使用函数来进行比较之外,还可以使用==或===来进行字符比较了,下面本文章就字符串比较问题给各位总结一下。

比较字符串是任何编程语言的字符串处理功能中重要的特性之一。在PHP中除了可以使用比较运算符号(==、<或>)加以比较外,还提供了一系列的比较函数,使PHP可以进行更复杂的字符串比较。如strcmp()、strcasecmp()和strnatcmp()等函数。

1.按字节顺序进行字符串比较

要按字节顺序进行字符串的比较,可以使用strcmp()和strcasecmp()两个函数,其中函数strcasecmp()可以忽略字符串中字母的大小写进行比较。这两个函数的原型如下所示:

 代码如下 复制代码

in strcmp(string str1,string str2)               //区分字符串中字母大小写地比较
int strcasecmp(string str1,string str2)                //忽略字符串中字母大小写地比较

这两个函数的用法相似,都需要传入进行比较的两个字符串参数。可以对输入的str1和str2两字符串,按照字节的ASCII值从两个字符串的首字节开始比较,如果相等则进入下一个字节的比较,直至结束比较。返回以下三个值之一:
★如果str1等于str2则返回0。
★如果str1大于str2则返回1。
★如果str1小于str2则返回-1。

在下面的程序中通过比较后的返回值判断两个比较字符串大小。使用strcmp()函数区分字符串中字母大小写的比较,使用strcasecmp()函数忽略字符串中字母大小写的比较。当然没有实际意义。代码如下所示:

 代码如下 复制代码
<?php
$username = "Admin";
$password = "lampBrother";
 
//不区分大小写的比较,如果两个字符串相等返回0
if(strcasecmp($userName,"admin")== 0){
echo "用户名存在";
}
//将两个比较的字符串相应的函数转成全大写或全小写后,也可以实现不区分大小写的比较
if(strcasecmp(strtolower($userName),strtolower("admin")) == 0){
echo "用户名存在";
}
 
//区分字符串中字母的大小写比较
switch(strcmp($password,"lampbrother")){
case 0:
echo "两个字符串相等<br>"; break;
case 1:
echo "第一个字符串大于第二个字符串<br>"; break;
case -1:
echo "第一个字符串小于第二个字符串<br>"; break;
}
?>

2.按自然排序进行字符串比较

除了可以按照字节位的字典顺序进行比较外,PHP还提供了按照“自然排序”法对字符串进行比较。所谓自然排序,是指按照人们的日常生活中的思维习惯进行排序,即将字符串中的数字部分按照数字大小进行比较。例如按照字节比较时“4”大于“33”,因为“4”大于“33”中的第一个字符,而按照自然排序法则“33”大于“4”。使用strnatcmp()函数按自然排序法比较两个字符串,该函数对大小写敏感,其使用格式与strcmp()函数相似。

在下面的例子中,对一个数组中带有数字的文件名,使用冒泡排序法通过两种比较方法排序。代码如下所示:

 代码如下 复制代码
<?php
//定义一个包含数字值的数组
$files = array("file11.txt","file22.txt","file1.txt","file2.txt");
 
function mySort($arr,$select = false){
for($i=0;$i<count($arr);$i++){
for($j;$j<count($arr)-1;$j++){
//如果第二个参数为ture则使用strcmp()函数比较大小
if($select){
//前后两个值比较结果大于0则交换位置
if(strcmp($arr[$j],$arr[j+1])>0){
$tmp = $arr[$j];
$arr[$j] = $arr[$j+1];
$arr[$j+1] = $tmp;
}
//如果第二个参数为false则使用strnatcmp()函数比较大小
}else{
//如果比较结果大于0交换位置
if(strnatcmp($arr[$j],$arr[$j+1])>0){
$tmp = $arr[$j];
$arr[$j] = $arr[$j+1];
$arr[$j+1]; = $tmp;
}
}
}
}
return $arr; //排序后的数组
}
print_r(mySort($files,true));         //选择按字典顺序排序: file1.txt file11.txt file2.txt file22.txt
print_r(mySort($files,false));          //选择按自然顺序排序:file1.txt file2.txt file11.txt file22.txt
?>

在PHP中也提供了这个函数忽略大小写的版本的函数strnatcasecmp()用法与strnatcmp()函数相同。

除了上面利用函数比较我们还可以使用“===”来判断,至于它和“==”的区别

一般能用 !=, == 比较两个对象是否相等,只所以说是两个对象,是因为他们不一定全部为字符串,也能为整型等等。
  如果用 !==,===(能看到多了一个等号)比较的话,两个对象的类型要严格相等才能返回true;否则用==,!=则会将字符串自动转换成相应的类型,以便进行比较.

 代码如下 复制代码
22 == "22"; // 返回 true
22 === "22"; // 返回false  

 

正因为这样,所以我们的程式时常会发生一些想不到的“意外”:

 代码如下 复制代码

0 == "我爱你"; // 返回true
1 == "1 我爱你";// 返回true

还有一种比较方法

var_dump("1" == "1e0");
var_dump("1" == "0x1");
var_dump("20" == "2e1");
var_dump("10" == "  0x0a");

等等;
对, 也许你会说在PHP手册的附录中有一部分关于这个问题的总结. 问题是,这只是知其然, 那么所以然是什么呢?
今天就有一个网友问了我一个问题:

 代码如下 复制代码


var_dump("1" == "1e0");  //true 
var_dump("1" == "1ef"); //false 

这两个的结果为什么不一样啊. 
也就是说, 上面的等式a要成立, 那么唯一的解释就是PHP讲他们双发都当作int来比较.
但是, var_dump(“1e0″),或者var_dump(“1″),都是string啊.

因为PHP不区分类型, 所以她采用一个策略, 当你的变量看起来是一个数字的时候, 那么她就认为这个变量是一个数字.
简单来说, numeric_string就是表示数字的字符串:
也就是说,如下的比较结果都是真:

 代码如下 复制代码

var_dump("1" == "1e0"); 
var_dump("1" == "0x1"); 
var_dump("20" == "2e1"); 
var_dump("10" == "  0x0a"); 

呵呵, 读者们遇到过这个问题的困扰么?

 代码如下 复制代码
if("608E-4234" == "272E-3063"){ 
    echo "oh shit! they're equal!\n"; 
}else{ 
    echo "obviously, isn't?\n"; 

PHP开发Tips:如果想要判断两个字符串是否相等,使用 === 而不是 ==。

上传文件用得最多的是ajax了,现在这里我们可以使用iframe 模仿了,下面一聚教程小伙伴就来为各位同学整理一个frame实现无刷新上传文件例子,希望能帮助到各位朋友哦。

使用label的for属性来取代js的event转移,解决IE下“SCRIPT5: 拒绝访问”的问题;

html代码

 代码如下 复制代码

<!DOCTYPE HTML>
<html lang="en-US">
<head>
<meta charset="UTF-8">
<title></title>
<script src="//code.jquery.com/jquery-1.11.0.min.js"></script>
<script src="//code.jquery.com/jquery-migrate-1.2.1.min.js"></script>
<script>
// 当前上传对象
var _current    = null;
// 上传回调方法
function onUploadSuccess(info){
    // 控制台调试,可能是因为console没定义导致IE无法使用此功能
    typeof console.dir!=='undefined' && console.dir(info);
    // 上传成功
    if(typeof info.status!=='undefined' && typeof info.path!=='undefined' && info.status==1 && info.path!=''){
        // 改变图片src,实现实时预览
        if(_current.find('img').size()>0)
            _current.find('img:eq(0)').prop('src', info.path);
        else
            _current.html('<img src="'+info.path+'" width="100%" height="100%" />');
        // 返回
        return;
    }
    // 上传失败则提示错误信息
    alert(info.info);
    // 返回
    return;
}
$(function(){
    $('label[for]').click(function(){
        _current    = $(this);
        $('.uploadform')[0].reset();
    });
    $('.uploadform input:file').change(function(){
        $(this).parent().submit();
    });
});
</script>
</head>
<body>
 
<label for="photo1" style="border:1px solid #CCC; padding:2px; width:120px; height:80px; display:block;"></label>
<label for="photo1" style="border:1px solid #CCC; padding:2px; width:120px; height:80px; display:block;"></label>
 
<form style="display:none;" class="uploadform" action="{:U('upload?callback=window.parent.onUploadSuccess')}" method="post" enctype="multipart/form-data" target="uploadiframe">
    <input type="file" name="photo1" id="photo1" />
    <iframe style="display:none;" name="uploadiframe"></iframe>
</form>
 
</body>
</html>

php处理程序

 代码如下 复制代码

<?php
$retval = array('status'=>0, 'info'=>'', 'path'=>'');
if(/*upload success*/){
    $retval['status'] = 1;
    $retval['path'] = 'somepath';
}else{
    $retval['info'] = 'someerror';
}
echo "<script>{$_GET['callback']}(".json_encode($retval).");</script>";
exit;

简单总结:这个其实很简单在表单中我们action设置为上传php的模板文件,然后我们再在表单target 打开方式设置为iframe的name即可。

KMP算法是一个比较高级的算法了,加了改进了,下面我们来在php中实现KMP算法,希望例子对各位同学会带来帮助哦。

kmp算法是一种改进的字符串匹配算法,由D.E.Knuth与V.R.Pratt和J.H.Morris同时发现,因此人们称它为克努特——莫里斯——普拉特操作(简称KMP算法)。KMP算法的关键是根据给定的模式串W1,m,定义一个next函数。next函数包含了模式串本身局部匹配的信息

例子

 代码如下 复制代码

<?php
/*

字符串匹配KMP算法的PHP语言实现

*/

function KMP($str) {
    $K = array(0);
    $M = 0;
    $strLen = strlen($str);
    for($i=1; $i<$strLen; $i++) {
        if ($str[$i] == $str[$M]) {
            $K[$i] = $K[$i-1] + 1;
            $M ++;
        } else {
            $M = 0;
            $K[$i] = $K[$M];
        }
    }
    return $K;
}
 
// KMP查找

function KMPMatch($src, $par) {
    $K = KMP($par);
 
    $srcLen = strlen($src);
    $parLen = strlen($par);
 
    for($i=0,$j=0; $i<$srcLen; ) {
 
        
//返回完全匹配的位置

        if ($j == $parLen) return $i-$j;
 
        
//打印匹配过程

        echo $i."  ".$j. " {$src[$i]}-{$par[$j]} <BR>";
 
        if ($par[$j] === $src[$i]) {
            
//记录匹配个数

            $j++;
            $i++;
        } else {
            if ($j === 0) {
                $i++;
            }
            $j = $K[$j-1 >= 0 ? $j -1 : 0];
        }
    }
    return false;
}
 
// 测试下是否可用

$src = 'BBC ABCDAB ABCDABCDABDE';
$par = 'ABCDABD';
 
// 匹配值

echo "部分匹配值:", implode(" ", KMP($par)), "<BR>";
// 在给定的字符串中查找特定字符(串)

echo  KMPMatch($src, $par), "<BR>";
 
/*

部分匹配值:0 0 0 0 1 2 0

0 0 B-A

1 0 B-A

2 0 C-A

3 0  -A

4 0 A-A

5 1 B-B

6 2 C-C

7 3 D-D

8 4 A-A

9 5 B-B

10 6 -D

10 2 -C

10 0 -A

11 0 A-A

12 1 B-B

13 2 C-C

14 3 D-D

15 4 A-A

16 5 B-B

17 6 C-D

17 2 C-C

18 3 D-D

19 4 A-A

20 5 B-B

21 6 D-D

15

*/

PHP GD中有大量的图片处理函数,我们可以利用PHP GD来生成各种图片了,下面一聚教程小编来给大家介绍一个PHP GD生成图像的例子。

使用GD库中提供的函数动态绘制完成图像以后,就需要输出到浏览器或者将图像保存起来。在PHP中,可以将动态绘制完成的画布,直接生成GIF、JPEG、PNG和WBMP四种图像格式。可以通过调用下面四个函数生成这些格式的图像:
  bool imagegif(resource $image[,string $filename])                              //以GIF格式将图像输出
  bool imagejpeg(resource $image[,string $filename[,int $quality]])                        //以JPEG格式将图像输出
  bool imagepng(resource $image[,string $filename])                                 //以PNG格式将图像输出
  bool imagewbmp(resource $image[,string $filename[,int $foreground]])                      //以WBMP格式将图像输出

以上四个函数的使用类似,前两个参数的使用是相同的。第一个参数$image为必选项,是前面介绍的图像引用句柄。如果部位这些函数提供其他参数,访问时则直接将原图像流出,并在浏览器使用中显示动态输出的图像。但一定要在输出之前,使用header()函数发送标头信息,用来通知浏览器使用正确的MIME类型对接收的内容进行解析,让它知道我们发送的是图片而不似乎文本的HTML。以下代码段通过自动检测GD库支持的图像类型,来写出移植性更好的
PHP程序。如下所示:

 代码如下 复制代码
<?php
    if(function_exists("imagegif")){                //判断生成GIF格式图像的函数是否存在
        header("Content-type:image/gif");           //发送标头信息设置MIME类型为image/gif
        imagegif($im);                              //以GIF格式将图像输出到浏览器
    }elseif(function_exists("imageipeg")){
        header("Content-type:image/jpeg");
        imagejpeg($im,"",0.5);
    }elseif(function_exists("imagepng")){
        header("Content-type:image/png");
        imagepng($im);
    }elseif(function_exists("imagewbmp")){
        header("Content-type:image/wbmp");
        imagewbmp($im);
    }else{
        die("在PHP服务器中,不支持图像");
    }
?>

  如果希望将PHP动态绘制的图像保存在本地服务器上,则必须在第二个可选参数中指定一个文件名字符串。这样不仅不会将图像直接输出到浏览器,也不需要使用header()函数发送标头信息。如果使用imageJPEG()函数生成JPEG格式的图像,还可以通过第三个可选参数$quality指定JPEG格式图像的品质,该参数可以提供的值是从0(最差品质,但文件最小)到100(最高品质,文件也最大)的整数,默认值为75.也可以为函数imageWBMP()提供第三个可选参数$forground,指定图像的前景颜色,默认颜色值为黑色。

注意:php中gd库默认是未开启的,我们需要在php.ini中打开才可以,具体步骤

Linux下开启PHP的GD库支持

 代码如下 复制代码
#开启GD库支持有以下几种方法
##检测GD库是否安装命令
 php5 -m | grep -i gd
 或者
 php -i | grep -i --color gd
##如未安装GD库,则为服务器安装,方法如下
### 如果是源码安装,则加入参数
 --with-gd
### 如果是debian系的linux系统,用apt-get安装,如下
 apt-get install php5-gd
### 如果是CentOS系的系统,用yum安装,如下
 yum install php-gd
### 如果是suse系的linux系统,用yast安装,如下
 yast -i php5_gd
### 如果嫌这个世界不够蛋疼呢,可以在原先编译PHP不支持GD的情况下附加

 先下zlib源码,libpng源码,gd源码
 解压后到源码目录
 

 代码如下 复制代码
zlib目录
 ./configure --prefix=/usr/local/zlib
 make ; make install
 make clean
 libpng目录
 cp scripts/makefile.linux ./makefile
 ./configure --prefix=/usr/local/libpng
 make ; make install
 make clean
 gd目录
 ./configure --prefix=/usr/local/libgd --with-png=/usr/local/libpng
 make ; make install
 make clean
 

最后在php.ini中,搜到[gd]后,在下面加一行

 代码如下 复制代码
 extension=/usr/local/libgdgd.so

 然后重启php服务,如果不行,试试reboot

 好了,不过最后提醒一下,要知道这个世界很多意外的,源码安装,只添加gd库这一个情况下,PHP版本和库的版本各异,所以:
 - 不保证这么付出了这么多后有回报
 - 不保证能够成功加载gd.so
 - 不保证不怀孕

 所以如果是源码安装,最好还是在编译PHP的时候加参数--with-gd

Windows下开启PHP的GD库支持

找到php.ini,打开内容,找到:

;extension=php_gd2.dll

把最前面的分号“;”去掉,再保存即可,如果本来就没有分号,那就是已经开启了。

[!--infotagslink--]

相关文章

  • php 中file_get_contents超时问题的解决方法

    file_get_contents超时我知道最多的原因就是你机器访问远程机器过慢,导致php脚本超时了,但也有其它很多原因,下面我来总结file_get_contents超时问题的解决方法总结。...2016-11-25
  • php抓取网站图片并保存的实现方法

    php如何实现抓取网页图片,相较于手动的粘贴复制,使用小程序要方便快捷多了,喜欢编程的人总会喜欢制作一些简单有用的小软件,最近就参考了网上一个php抓取图片代码,封装了一个php远程抓取图片的类,测试了一下,效果还不错分享...2015-10-30
  • HTTP 408错误是什么 HTTP 408错误解决方法

    相信很多站长都遇到过这样一个问题,访问页面时出现408错误,下面一聚教程网将为大家介绍408错误出现的原因以及408错误的解决办法。 HTTP 408错误出现原因: HTT...2017-01-22
  • c#自带缓存使用方法 c#移除清理缓存

    这篇文章主要介绍了c#自带缓存使用方法,包括获取数据缓存、设置数据缓存、移除指定数据缓存等方法,需要的朋友可以参考下...2020-06-25
  • Android子控件超出父控件的范围显示出来方法

    下面我们来看一篇关于Android子控件超出父控件的范围显示出来方法,希望这篇文章能够帮助到各位朋友,有碰到此问题的朋友可以进来看看哦。 <RelativeLayout xmlns:an...2016-10-02
  • ps把文字背景变透明的操作方法

    ps软件是现在非常受大家喜欢的一款软件,有着非常不错的使用功能。这次文章就给大家介绍下ps把文字背景变透明的操作方法,喜欢的一起来看看。 1、使用Photoshop软件...2017-07-06
  • Mysql select语句设置默认值的方法

    1.在没有设置默认值的情况下: 复制代码 代码如下:SELECT userinfo.id, user_name, role, adm_regionid, region_name , create_timeFROM userinfoLEFT JOIN region ON userinfo.adm_regionid = region.id 结果:...2014-05-31
  • intellij idea快速查看当前类中的所有方法(推荐)

    这篇文章主要介绍了intellij idea快速查看当前类中的所有方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-09-02
  • js导出table数据到excel即导出为EXCEL文档的方法

    复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta ht...2013-10-13
  • mysql 批量更新与批量更新多条记录的不同值实现方法

    批量更新mysql更新语句很简单,更新一条数据的某个字段,一般这样写:复制代码 代码如下:UPDATE mytable SET myfield = 'value' WHERE other_field = 'other_value';如果更新同一字段为同一个值,mysql也很简单,修改下where即...2013-10-04
  • IDEA中的clean,清除项目缓存图文教程

    这篇文章主要介绍了IDEA中的clean,清除项目缓存图文教程,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-09-25
  • ps怎么制作倒影 ps设计倒影的方法

    ps软件是一款非常不错的图片处理软件,有着非常不错的使用效果。这次文章要给大家介绍的是ps怎么制作倒影,一起来看看设计倒影的方法。 用ps怎么做倒影最终效果&#819...2017-07-06
  • js基础知识(公有方法、私有方法、特权方法)

    本文涉及的主题虽然很基础,在许多人看来属于小伎俩,但在JavaScript基础知识中属于一个综合性的话题。这里会涉及到对象属性的封装、原型、构造函数、闭包以及立即执行表达式等知识。公有方法 公有方法就是能被外部访问...2015-11-08
  • 安卓手机wifi打不开修复教程,安卓手机wifi打不开解决方法

    手机wifi打不开?让小编来告诉你如何解决。还不知道的朋友快来看看。 手机wifi是现在生活中最常用的手机功能,但是遇到手机wifi打不开的情况该怎么办呢?如果手机wifi...2016-12-21
  • PHP 验证码不显示只有一个小红叉的解决方法

    最近想自学PHP ,做了个验证码,但不知道怎么搞的,总出现一个如下图的小红叉,但验证码就是显示不出来,原因如下 未修改之前,出现如下错误; (1)修改步骤如下,原因如下,原因是apache权限没开, (2)点击打开php.int., 搜索extension=ph...2013-10-04
  • c#中分割字符串的几种方法

    单个字符分割 string s="abcdeabcdeabcde"; string[] sArray=s.Split('c'); foreach(string i in sArray) Console.WriteLine(i.ToString()); 输出下面的结果: ab de...2020-06-25
  • js控制页面控件隐藏显示的两种方法介绍

    javascript控制页面控件隐藏显示的两种方法,方法的不同之处在于控件隐藏后是否还在页面上占位 方法一: 复制代码 代码如下: document.all["panelsms"].style.visibility="hidden"; document.all["panelsms"].style.visi...2013-10-13
  • 连接MySql速度慢的解决方法(skip-name-resolve)

    最近在Linux服务器上安装MySql5后,本地使用客户端连MySql速度超慢,本地程序连接也超慢。 解决方法:在配置文件my.cnf的[mysqld]下加入skip-name-resolve。原因是默认安装的MySql开启了DNS的反向解析。如果禁用的话就不能...2015-10-21
  • C#方法的总结详解

    本篇文章是对C#方法进行了详细的总结与介绍,需要的朋友参考下...2020-06-25
  • Zend studio文件注释模板设置方法

    步骤:Window -> PHP -> Editor -> Templates,这里可以设置(增、删、改、导入等)管理你的模板。新建文件注释、函数注释、代码块等模板的实例新建模板,分别输入Name、Description、Patterna)文件注释Name: 3cfileDescriptio...2013-10-04