在Java和.net中均遇到这样的情况,现在贴出.net代码。
JS代码:
var XMLHttpReq;
//创建XMLHttpRequest对象
function createXMLHttpRequest() {
if (window.XMLHttpRequest) { //Mozilla 浏览器
XMLHttpReq = new XMLHttpRequest();
} else {
if (window.ActiveXObject) { // IE浏览器
try {
XMLHttpReq = new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e) {
try {
XMLHttpReq = new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e) {
}
}
}
}
}
//发送请求函数
function SendRequest(url,fun) {
createXMLHttpRequest();
XMLHttpReq.open("GET", url, true);
XMLHttpReq.onreadystatechange = fun;//指定响应函数
XMLHttpReq.send(null); // 发送请求
}
// 处理返回信息函数
function SetResult() {
if (XMLHttpReq.readyState == 4) { // 判断对象状态
if (XMLHttpReq.status == 200) { // 信息已经成功返回,开始处理信息
var xmlDoc=XMLHttpReq.responseXML.documentElement;
var txtGuID=document.getElementById("<%=txtGuID.ClientID%>");
var str=xmlDoc.getElementsByTagName("id")[0].firstChild.data;
str=str.substring(1,str.length);
var id=parseInt(str,10)+1;
if(id<100)
txtGuID.value="h0"+id.toString();
else
txtGuID.value="h"+id.toString();
} else { //页面不正常
window.alert("您所请求的页面有异常。");
}
}
}
function getHelpId()
{
var txtGuID=document.getElementById("<%=txtGuID.ClientID%>");
if(txtGuID.value!=null&&txtGuID.value=="")
{
SendRequest("GetHelpId.ashx",SetResult);
}
}
C#后台代码
public class GetHelpId : IHttpHandler
{
public void ProcessRequest (HttpContext context) {
context.Response.Clear();
context.Response.ContentType = "text/xml";
context.Response.ContentEncoding = System.Text.Encoding.UTF8;//设置输出流为简体中文
DevSoft.Train.Model.Config model = new DevSoft.Train.Model.Config();
Object[]obj = DevSoft.Train.Bll.ConfigImpl.GetHelpList(model);//此处为调用数据库,返回一个最大的ID
System.Data.DataTable dt = ((System.Data.DataSet)obj[0]).Tables[0];
System.Text.StringBuilder str = new System.Text.StringBuilder();
str.Append("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
str.Append("<response>");
for (int i = 0; i < dt.Rows.Count; i++)
{
str.AppendFormat("<id>{0}</id>", dt.Rows[i]["MaxID"].ToString());
}
str.Append("</response>");
context.Response.Write(str);
}
public bool IsReusable {
get {
return false;
}
}
}
C#前台代码
<asp:TextBox ID="txtGuID" runat="server" CssClass="myTextbox" onFocus="getHelpId()" Width="200" />
上面的代码作用是,当我点击文本框时,此文本框获取一个数据库中最大ID,并将该ID增1;上面数据库调用部分肯定正确的。
假设,我数据库有一个最大ID为“h070”,当我第一次点击文本框的时候,返回的是“h070”,文本框中为“h071”;
当我保存了这个ID之后(转到另一个页面做保存),再次增加操作(回到该页面),点击文本框时,它还是返回“h070”,文本框中为“h071”;不知道这是怎么回事?
另外上次遇到的下拉列表保持原来的值,是因为js函数回调引起的,即客户端变化,而服务端不变化,我应该不属于这种情况吧?
6 个解决方案
#1
自己顶一个
#2
Ajax请求缓存引起的问题
SendRequest("GetHelpId.ashx?"+Math.random(),SetResult);
每次发请求加上随机数就可以了。
SendRequest("GetHelpId.ashx?"+Math.random(),SetResult);
每次发请求加上随机数就可以了。
#3
加个随机参数,因为ie会默认缓存
SendRequest("GetHelpId.ashx? rd="+new Date().valueOf(),SetResult);
SendRequest("GetHelpId.ashx? rd="+new Date().valueOf(),SetResult);
#4
"SendRequest("GetHelpId.ashx",SetResult);"
加一個隨機參數,讓其刷新
加一個隨機參數,讓其刷新
#5
IE中如果XMLHttpRequest提交的URL与历史一样则使用缓存,根本不向服务器端提交。因此无法取到刚提交的数据或新的数据
改进服务器端
直接加上<%@ OutPutCache Location="None"%>即可。
但是如果后台是.ashx文件通常在类里直接修改缓存设置。
context.Response.Cache.SetCacheability(HttpCacheability.NoCache);
改进客户端
利用加随机数或加时间戳改变请求地址
加随机数:var url='AjaxOperations.aspx?rdm='+Math.random()+'&action='+op;
加时间戳:var url='AjaxOperations.aspx?dtStamp='+new Date().getTime()+'&action='+op;
前台异步调用设置XMLHttpRequest对象的属性
在XMLHttpRequest发送请求之前加上XMLHttpRequest.setRequestHeader("If-Modified-Since","0")
改进服务器端
直接加上<%@ OutPutCache Location="None"%>即可。
但是如果后台是.ashx文件通常在类里直接修改缓存设置。
context.Response.Cache.SetCacheability(HttpCacheability.NoCache);
改进客户端
利用加随机数或加时间戳改变请求地址
加随机数:var url='AjaxOperations.aspx?rdm='+Math.random()+'&action='+op;
加时间戳:var url='AjaxOperations.aspx?dtStamp='+new Date().getTime()+'&action='+op;
前台异步调用设置XMLHttpRequest对象的属性
在XMLHttpRequest发送请求之前加上XMLHttpRequest.setRequestHeader("If-Modified-Since","0")
#6
好收藏
#1
自己顶一个
#2
Ajax请求缓存引起的问题
SendRequest("GetHelpId.ashx?"+Math.random(),SetResult);
每次发请求加上随机数就可以了。
SendRequest("GetHelpId.ashx?"+Math.random(),SetResult);
每次发请求加上随机数就可以了。
#3
加个随机参数,因为ie会默认缓存
SendRequest("GetHelpId.ashx? rd="+new Date().valueOf(),SetResult);
SendRequest("GetHelpId.ashx? rd="+new Date().valueOf(),SetResult);
#4
"SendRequest("GetHelpId.ashx",SetResult);"
加一個隨機參數,讓其刷新
加一個隨機參數,讓其刷新
#5
IE中如果XMLHttpRequest提交的URL与历史一样则使用缓存,根本不向服务器端提交。因此无法取到刚提交的数据或新的数据
改进服务器端
直接加上<%@ OutPutCache Location="None"%>即可。
但是如果后台是.ashx文件通常在类里直接修改缓存设置。
context.Response.Cache.SetCacheability(HttpCacheability.NoCache);
改进客户端
利用加随机数或加时间戳改变请求地址
加随机数:var url='AjaxOperations.aspx?rdm='+Math.random()+'&action='+op;
加时间戳:var url='AjaxOperations.aspx?dtStamp='+new Date().getTime()+'&action='+op;
前台异步调用设置XMLHttpRequest对象的属性
在XMLHttpRequest发送请求之前加上XMLHttpRequest.setRequestHeader("If-Modified-Since","0")
改进服务器端
直接加上<%@ OutPutCache Location="None"%>即可。
但是如果后台是.ashx文件通常在类里直接修改缓存设置。
context.Response.Cache.SetCacheability(HttpCacheability.NoCache);
改进客户端
利用加随机数或加时间戳改变请求地址
加随机数:var url='AjaxOperations.aspx?rdm='+Math.random()+'&action='+op;
加时间戳:var url='AjaxOperations.aspx?dtStamp='+new Date().getTime()+'&action='+op;
前台异步调用设置XMLHttpRequest对象的属性
在XMLHttpRequest发送请求之前加上XMLHttpRequest.setRequestHeader("If-Modified-Since","0")
#6
好收藏