Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/89.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery ajax调用:异步属性不工作?_Javascript_Jquery_Ajax_Asynchronous - Fatal编程技术网

Javascript jQuery ajax调用:异步属性不工作?

Javascript jQuery ajax调用:异步属性不工作?,javascript,jquery,ajax,asynchronous,Javascript,Jquery,Ajax,Asynchronous,考虑到某些情况,我不得不在会话中保留页面设置(Javascript值),并且必须在离开页面之前完成(我不能使用cookies,因为“页面设置”可能会变得非常大,并且本地存储还不是一个选项;))。我就是这样尝试的。但是,当我再次直接调用页面时,似乎会异步调用“”,即使设置了async属性(我没有收到上一次调用的设置,但收到了之前调用的设置): 有人知道问题出在哪里吗 提前感谢代码看起来不错。您可以尝试bind('beforeunload',…)而不是unload,以便尽早获取内容。但是,当然,如果

考虑到某些情况,我不得不在会话中保留页面设置(Javascript值),并且必须在离开页面之前完成(我不能使用cookies,因为“页面设置”可能会变得非常大,并且本地存储还不是一个选项;))。我就是这样尝试的。但是,当我再次直接调用页面时,似乎会异步调用“”,即使设置了async属性(我没有收到上一次调用的设置,但收到了之前调用的设置):

有人知道问题出在哪里吗


提前感谢

代码看起来不错。您可以尝试
bind('beforeunload',…)
而不是
unload
,以便尽早获取内容。但是,当然,如果在卸载之前还挂起了
,卸载被取消,那么即使您仍在页面上,您的呼叫也会被发出


有点离题,但如果你能找到一个不同的方法来做这件事,我会的。当用户试图离开页面时触发同步ajax调用并不理想。

这对于用户体验来说是非常值得怀疑的。注意:在IE上,您的代码将为
\u setSessionValues
生成两个单独的函数对象。这是JScript中的一个bug。这对于引用的代码来说不是什么大不了的事情(两个函数都非常小),但是如果你在很多地方都使用这种模式的话,知道这一点是很有用的。问题是在执行命名函数表达式时(同时也指定给某个对象的
function name(){…}
)。JScript将其作为函数声明进行处理(创建函数),然后再作为函数表达式进行处理,创建一个完全独立的函数对象。可悲的是。@jAndy:我知道这个解决方案远远不是最优的。但正如我所说。。。在这种情况下,我想不出更好的办法了。将值放入会话的调用是无关紧要的。我已经测试过了。您没有注意到同步调用导致的块@T.J.克劳德:有趣。我不知道。我使用命名函数进行调试(以避免调用堆栈中的所有匿名函数)。但我会记住这一点,以备将来使用。谢谢提示:)我也考虑过beforeunload事件,但我记得我在某个地方读到它在IE中不起作用,所以我跳过了它。。。不过我现在试过了,效果很好。。。甚至在IE(7);)Thanks@Prjio:很高兴这有帮助
beforeunload
在IE(甚至IE6)中也能工作,您可能听说过的是,在IE中显示来自
beforeunload
的消息的机制与其他一些浏览器略有不同。但既然您没有显示消息…:-)显然是我弄错了。。。beforeunload似乎是一个IE事件(->Microsoft事件)。但它也适用于FF(同时,至少;)。。。无论如何,感谢您提供有关beforeunload事件消息的提示:)
$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)
            }
        });
    }
};