我可以在 jQuery 中设置会话变量吗?
我需要在 jQuery 的会话中存储一些数据,并且我还想通过 jQuery 检索这些数据。
有没有类似的
$.getSession.set("var","value");
会话可在服务器端访问。但是,如果您愿意,您可以通过编写一个函数来访问您的会话,例如调用您的服务器的 ajax 请求并获取您想要的任何内容。
编辑:
我将使用 ASP.NET MVC 框架向您展示这一点,因为我非常喜欢它。对于其他框架的想法是相同的 - 只需向服务器询问会话。
因此,让它在服务器端如下所示 - 编写了简单的控制器和 2 个基本操作:
public class HomeController : Controller
{
public ActionResult Index()
{
// store sample data
Session["user"] = new { name = "Anton Chigurh", age = 42 };
return View();
}
public JsonResult GetSessionValue(string key)
{
return Json(Session[key]);
}
}
首先,您必须将某些内容存储到会话中,例如通过调用Index
操作。接下来,调用GetSessionValue
操作以检索先前存储的值。除非您禁用了应用程序的会话或浏览器中的 cookie,否则您应该获得正确的值。
如何获得价值?只需发送ajax请求:
您可以编写将执行同步请求的 javascript 函数 - 实际上可以将您的浏览器冻结一段时间(取决于您用于某些计算的服务器时间消耗、网络基础设施条件等):
function getSessionValue(key) {
var result;
$.ajax({
url: "/Home/GetSessionValue",
type: 'POST',
dataType: 'json',
data: JSON.stringify({ key: key }),
contentType: 'application/json; charset=utf-8',
async: false
}).done(function (data) {
result = data;
});
return result;
}
// invoke
var user = getSessionValue("user");
console.log(user.name + ": " + user.age);
或异步版本,完成后调用回调:
function getSessionValue(key, callback) {
$.ajax({
url: "/Home/GetSessionValue",
type: 'POST',
dataType: 'json',
data: JSON.stringify({ key: key }),
contentType: 'application/json; charset=utf-8',
}).done(function (data) {
callback(data);
});
}
// invoke
getSessionValue("user", function(x) {
console.log(x.name + ": " + x.age);
});
顺便说一句:我使用了 json 序列化,因为这是我在将对象传入和传出服务器时更喜欢的方法。其他事情 - jQuerydone
事件只会在成功时触发。如果服务器端出现一些错误(例如:未捕获的异常),请求返回 http 500 并且不调用事件。
如果您正在考虑使用 jQuery 处理客户端会话,则需要一个插件。
我能想到的一个是jQuery Session Plugin。