【发布时间】:2010-06-14 07:25:29
【问题描述】:
在某些情况下,我不得不在会话中保留页面设置(Javascript 值),并且必须在离开页面之前完成(我不能使用 cookie,因为“pageSettings”可能会变得相当large 和 localStorage 还不是一个选项;))。所以这就是我尝试的方式。然而,当我再次直接调用页面时,“http://blabla.com/bla”的调用似乎是异步发生的,即使设置了异步属性(我没有收到上一个调用的设置,但之前的那个) :
$jQ(document).ready(function () {
$jQ(window).unload(Main.__setSessionValues);
});
var Main = {
pageSettings: {},
__setSessionValues: function __setSessionValues() {
$jQ.ajax({
type: "POST",
async: false,
url: "http://blabla.com/bla",
data: {
pageSettings: Object.toJSON(Main.pageSettings)
}
});
}
};
有人知道问题出在哪里吗?
提前致谢
【问题讨论】:
-
这对于用户体验来说是非常值得怀疑的
-
OT:在 IE 上,您的代码将为
__setSessionValues生成两个单独的函数对象。这是 JScript 中的一个错误。对于引用的代码来说,这没什么大不了的(两个函数都非常小),但是如果您将这种模式用于很多东西,了解它很有用。问题是当您执行命名函数表达式时(您还同时分配给某个东西的function name() { ... })。 JScript 将其作为函数declaration 处理(创建一个函数),然后稍后将其作为函数expression 再次处理,从而创建一个完全独立的函数对象。很遗憾。 -
@jAndy:我知道这个解决方案远非最佳。但正如我所说……鉴于这种情况,我想不出更好的主意。将值放入会话的调用是微不足道的。我已经测试过了。您不会注意到同步调用产生的块。 @T.J。克劳德:有趣。我不知道。我使用命名函数进行调试(以避免调用堆栈中的所有匿名函数)。但我会记住这一点,以备将来使用。感谢您的提示:)
标签: javascript jquery ajax asynchronous