如何在ajax请求中设置特殊的RequestHeader

如何在ajax请求中设置特殊的RequestHeader,第1张

这样是为了减少频繁访问服务器对其造成不必要的负担,但是同时也带来了一定特殊业务逻辑满足不了的问题。 例如: 需要通过前台一个select下拉列表来作为ajax的触发入口,同时将server返回的信息呈现在页面,并且往session或者数据库里面更新一些实际的东西的逻辑 *** 作。 当第一次切换选项,也就是提交请求的时候一切都是正常的,但是如果切换相同选项因为浏览器的缓存原因,将不会走到server,实际得到的动态信息是从缓存中去取的。造成后台的逻辑没有被走到。代码如下: aspx相关代码 复制代码 代码如下: <asp:DropDownList ID="ddlProductList" runat="server"><asp:ListItem Value="" Selected="True"></asp:ListItem><asp:ListItem Value="null">积立利率変动型终身保険</asp:ListItem><asp:ListItem Value="QIWL">・QIWL(H9)</asp:ListItem><asp:ListItem Value="KIWL">・KIWL(H11)</asp:ListItem><asp:ListItem Value="JIWL">・JIWL(H15)</asp:ListItem><asp:ListItem Value="null">积立利率変动型终身保険(市场金利连动型)</asp:ListItem><asp:ListItem Value="IIWL">・IIWL</asp:ListItem><asp:ListItem Value="HIWL">・HIWL</asp:ListItem><asp:ListItem Value="null">积立利率変动型终身保険(贮蓄重视型)</asp:ListItem><asp:ListItem Value="KIWLS">・KIWLS</asp:ListItem><asp:ListItem Value="null">ドル建积立利率変动型终身保険</asp:ListItem><asp:ListItem Value="ODIWL">・ODIWL</asp:ListItem><asp:ListItem Value="JDIWL">・JDIWL</asp:ListItem><asp:ListItem Value="HDIWL">・HDIWL</asp:ListItem><asp:ListItem Value="null">积立利率変动型养老保険(贮蓄重视型 米ドル建) </asp:ListItem><asp:ListItem Value="JDISE">・JDISE</asp:ListItem></asp:DropDownList> aspx.cs代码 复制代码 代码如下: if (!IsPostBack) { //为doropdownlist添加客户端事件 ddlProductList.Attributes.Add("onchange", "selectChange(this)")} Ajax.js代码 复制代码 代码如下: var requestfunction selectChange(obj) { createHttpRequest()var url = "AjaxService.aspx?product=" + obj.valuerequest.open("GET",url,true) request.onreadystatechange = resetRaterequest.send()return false} function createHttpRequest () { if (window.ActiveXObject) { request = new ActiveXObject("Microsoft.XMLHTTP")} else if (window.XMLHttpRequest) { request = new XMLHttpRequest()} } function resetRate() { if (request.readyState == 4) { if (request.responseText.substring(0,1) == "#") { document.getElementById("systemErrorMsg").innerHTML = request.responseText.substring(1)document.getElementById("rate").innerHTML = ""} else { document.getElementById("rate").innerHTML = request.responseTextdocument.getElementById("systemErrorMsg").innerHTML = ""} } } 请求页面代码 复制代码 代码如下: protected void Page_Load(object sender, EventArgs e) { string productShortName = Request.QueryString["product"]if (productShortName != null &&productShortName != "null" ) { string result = Utility.GetProductRate(packageName)Session["rate"] = resultResponse.Write(result)} } 经过分析问题出在XmlHttpRequest这个对象上面,切换选项后,并不是每次走到请求页面的逻辑中。查询了相关资料解决方案如下: request.setRequestHeader("If-Modified-Since","0")简单的说,Last-Modified 与If-Modified-Since 都是用于记录页面最后修改时间的 HTTP 头信息,只是 Last-Modified 是由服务器往客户端发送的 HTTP 头,而 If-Modified-Since 则是由客户端往服务器发送的头,可 以看到,再次请求本地存在的 cache 页面时,客户端会通过 If-Modified-Since 头将先前服务器端发过来的 Last-Modified 最后修改时间戳发送回去,这是为了让服务器端进行验证,通过这个时间戳判断客户端的页面是否是最新的,如果不是最新的,则返回新的内容,如果是最新的,则 返回 304 告诉客户端其本地 cache 的页面是最新的,于是客户端就可以直接从本地加载页面了,这样在网络上传输的数据就会大大减少,同时也减轻了服务器的负担。 另外还有另一个解决放案,不过还未经测试,理论上应该是可行的,就是在请求页面设置一下response的header: Response.AddHeader("Cache-control", "no-cache")

1、前台jsp中数组变量:

var checkedData = []//前台变量1

2、在ajax中设置该属性:

traditional: true,//传数组进后台需要设置该属性1

Ajax代码示例:

$.ajax({

url : URL_Business_QFCJPage,

data : {

"checkedData" : checkedData

},

dataType : 'json',

type : "post",

traditional: true,//属性在这里设置

success : function(message) {

//回调函数代码省略

},

waitMsg : '正在处理数据....'

})12345678910111213

3、后台Servlet中这样获取:

String[] s = request.getParameterValues("checkedData")//获取数组使用该函数1

Servlet代码示例:

package com.***

@Controller

public class QFCJPageController {

@RequestMapping("/business/QFCJPage")

@ResponseBody

public void CJ(HttpServletRequest request, HttpServletResponse response) throws IOException {

//如果数组有中文,注意设置编码,防止接收数据乱码。

request.setCharacterEncoding("utf-8")

response.setCharacterEncoding("utf-8")

String[] s = request.getParameterValues("checkedData")//"s"为获取的前台数组

}

}

ajax请求的五个步骤如下

步骤如下五个步骤

1.创建异步对象,首先,创建一个XMLHttpRequest异步对象。

2.设置请求方式和地址,然后,设置请求方式和请求地址

3.用send发送请求,接着,用send发送请求。

4.监听状态变化,然后,监听状态变化。

5.接收返回的数据,最后,接收返回的数据


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/8129853.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-13
下一篇 2023-04-13

发表评论

登录后才能评论

评论列表(0条)

保存