通过AJAX设置时,iOS 6 Mobile Safari会话变量不会保留
可能重复:
iOS 6上的Safari缓存$ .ajax结果吗?
我在移动Safari iOS 6中遇到了通过AJAX设置的会话变量问题。我包含一个样本,它将设置会话变量,重定向到另一个页面,放弃会话并重新开始。 这工作罚款前2次。 在整个过程中第三次,会话变量会丢失。 这个问题只发生在iOS 6 safari中。 它适用于我尝试过的所有其他浏览器。
该样本由3页组成。 Page1设置会话变量并重定向到页面2.页面2显示会话变量。 放弃会话变量。
HTML:
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="sm" runat="server" EnablePageMethods="true">
<Scripts>
<asp:ScriptReference Path="~/Page1.js" />
</Scripts>
</asp:ScriptManager>
<div onclick="setSessionVariable()">Set session variable and redirect to page 2</div>
</form>
</body>
</html>
Page 1 Javascript:
function setSessionVariable() {
PageMethods.SetSessionVariable(displaySetSessionVariable);
}
function displaySetSessionVariable(bReturn) {
window.location = "Page2.aspx";
}
Page 1代码:
using System.Web.Services;
namespace SafariSessionProblem {
public partial class Page1 : System.Web.UI.Page {
protected void Page_Load(object sender, EventArgs e) {
}
[WebMethod]
public static Boolean SetSessionVariable() {
System.Web.HttpContext.Current.Session["TestVariable"] = 1;
return true;
}
}
}
HTML:
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<asp:Label ID="lbl" runat="server" Text="Label"></asp:Label><br /><br />
<div onclick="window.location = 'Page3.aspx'">Redirect to page 3 and abondon session</div>
</form>
</body>
</html>
代码:
namespace SafariSessionProblem {
public partial class Page2 : System.Web.UI.Page {
protected void Page_Load(object sender, EventArgs e) {
lbl.Text = Session["TestVariable"].ToString();
}
}
}
HTML:
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div onclick="window.location = 'Page1.aspx'">Start over</div>
</form>
</body>
</html>
代码:
namespace SafariSessionProblem {
public partial class Page3 : System.Web.UI.Page {
protected void Page_Load(object sender, EventArgs e) {
Session.Abandon();
}
}
}
我已经找出了它的问题,因为在IOS6 Safari中缓存了ajax请求和响应,所以在向服务器发送请求时使用了缓存的请求。 为了解决这个问题,只需将时间戳添加到Ajax请求中,它就可以正常工作。 我已经放置了我使用过的代码,在此帮助下更新了代码。 希望会对你有所帮助。
这是新的变量来克服这个问题parameters.timeStamp = new Date()。getTime();
parameters.qString = location.hash;
parameters.timeStamp = new Date().getTime();//this new line for safari issue
application.ajax({
url: application.ajaxUrl + "ajax",
type: "post",
dataType: "json",
data: $.extend({method:parameters.method}, parameters),
success: function( response ){
stop_spinner();
})
});
谢谢
链接地址: http://www.djcxy.com/p/55707.html上一篇: iOS 6 Mobile Safari Session Variables not retained when set via AJAX