1

我可以在 jQuery 中设置会话变量吗?

我需要在 jQuery 的会话中存储一些数据,并且我还想通过 jQuery 检索这些数据。

有没有类似的

$.getSession.set("var","value");
4

2 回答 2

3

会话可在服务器端访问。但是,如果您愿意,您可以通过编写一个函数来访问您的会话,例如调用您的服务器的 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请求:

  1. 您可以编写将执行同步请求的 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);
    
  2. 或异步版本,完成后调用回调:

    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 并且不调用事件。

于 2012-11-21T13:03:39.807 回答
1

如果您正在考虑使用 jQuery 处理客户端会话,则需要一个插件。

我能想到的一个是jQuery Session Plugin

于 2012-11-21T13:02:49.757 回答