我可以在jQuery中設置會話變量嗎?在jQuery中訪問會話
我需要在jQuery會話中存儲一些數據,我也想通過jQuery檢索數據。
有什麼樣
$.getSession.set("var","value");
我可以在jQuery中設置會話變量嗎?在jQuery中訪問會話
我需要在jQuery會話中存儲一些數據,我也想通過jQuery檢索數據。
有什麼樣
$.getSession.set("var","value");
會話在服務器端是可訪問的。但是,如果你願意,你可以通過編寫一個函數來訪問你的會話,例如調用一個jax請求到你的服務器並得到你想要的任何東西。
編輯:
我會告訴你這一點使用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 seriazlization,因爲它是我喜歡的方法,同時傳遞對象到服務器和從服務器。其他的事情 - jQuery done
事件只會在成功時觸發。如果服務器端出現一些錯誤(例如:未捕獲的異常),請求將返回http 500並且不會調用事件。
如果您正在尋找在處理客戶端會話使用jQuery,你會需要一個插件。
我能想到的一個是jQuery Session Plugin。
嗨,我試過這個。 存儲和Retriving Strings可以,但不能存儲從Ajax調用返回的對象。 – pst
您正在考慮的會話聽起來像是服務器會話,通常在PHP中使用$ _SESSION進行訪問,並且唯一的方法是在服務器端訪問它,但您可以使用ajax來設置和獲取值。在現代瀏覽器中還有一個名爲sessionStorage的內置會話存儲,並且像localStorage一樣工作,只有當會話結束時它纔會被清空。 – adeneo
服務器會話**可以包含高度敏感的數據**。不要盲目地在客戶端發佈其內容!什麼要求可以證明從客戶端訪問會話變量?我很確定有更好的方法。你能描述一下你的實際需求嗎? –
@Steve B:就像你剛剛說的那樣,它**可以包含**。基本上它只是一個誠實的容器,你可以存儲任何你想要的東西。這種方法的適用性是另一種情況。 – jwaliszko