这是为了减少频繁访问服务器带来的不必要的负担,但同时也带来了一些特殊业务逻辑无法满足的问题。
例如:
作为Ajax的触发器条目,需要选择下拉列表。同时,服务器返回的信息显示在页面上,一些逻辑操作被更新到会话或数据库中。
当提交第一个切换选项时,请求是正常的,但是如果切换相同的选项,浏览器将不会因为缓存原因而进入服务器。实际的动态信息从缓存中删除。导致后台的逻辑没有被占用。代码如下所示:
aspx相关代码
复制代码代码如下所示:


利率变化产品李型寿险
qiwl(H9)
kiwl(H11)
jiwl(H15)
利率变化产品李型寿险(市场金利挂钩)
iiwl
hiwl
利率变化产品李型寿险(储值型)
kiwls
我们不能建产品李换型寿险利率
odiwl
jdiwl
hdiwl
利率变化产品李养老保险(52米,建无关注型)
jdise


aspx.cs代码
复制代码代码如下所示:
如果(!IsPostBack)
{
/ /添加doropdownlist客户端事件
DdlProductList.Attributes.Add(变化
}

个ajax.js代码
复制代码代码如下所示:
无功的要求;
功能selectchange(obj){
CreateHttpRequest();
var url =ajaxservice。aspxproduct =+ obj.value;
Request.open(
request.onreadystatechange = resetrate;
Request.send();
返回false;
}
功能createhttprequest(){
如果(窗口。ActiveX对象){
请求=新的ActiveX对象(微软。XMLHTTP );
如果(窗口。XMLHttpRequest){ }
请求=新的XMLHttpRequest();
}
}
功能resetrate(){
如果(request.readystate = = 4){
如果(request.responsetext.substring(0,1)= =# { )
Document.getElementById (systemErrorMsg).InnerHTML = request.responseText.substring (1);
document.getelementbyid(率).innerHTML = ;
{人}
document.getelementbyid(率).innerHTML = request.responsetext;
document.getelementbyid(systemerrormsg ).innerHTML = ;
}
}
}

请求的页面代码
复制代码代码如下所示:
protected void page_load(object sender,EventArgs e)
{
字符串productshortname =请求。QueryString {产品};
如果(productshortname!= null productshortname!=null )
{
结果字符串= utility.getproductrate(packagename);
会话{速率=结果;
响应。写入(结果);
}
}

经过分析,问题是XMLHttpRequest对象,切换后的选择,不是每次去请求页的逻辑。相关数据解决方案查询如下:
Request.setRequestHeader(If-Modified-Since
简单的说,最后的修改和If-Modified-Since是用来记录网页的最后修改HTTP头信息,只有最后的修改是HTTP服务器向客户端发送的头,而如果更改了从客户端向服务器发送的头,可以再次看到当地现有的缓存页面的请求,客户端通过服务器端如果因为以前从上次修改的最后修改时间戳退回修改,这是为了让服务器验证,通过这个时间戳确定客户端页面是不是最新的,如果不是最新的,则返回新的内容,如果是新的,则返回304,告诉客户端的本地缓存的页面是最新的,所以客户端可以直接从本地负载,所以对NE的数据网络将大大减少,减少了服务器的负担。
这个问题还有另一种解决方案,但是它还没有被测试过,理论上应该是可行的,也就是说,在请求页面上设置响应头。
response.addheader(缓存控制