如何避免在非IE浏览器中使用pushState和$.ajax(hash)进行双重提交

How can I avoid double submissions with pushState and $.ajax(hash) in non-IE browsers?

本文关键字:hash ajax 提交 IE 何避免 浏览器 pushState      更新时间:2023-09-26

Internet Explorer似乎是唯一一个不支持pushState来处理AJAX提交历史记录的主要浏览器。所以无论我在哪里:

$.bbq.pushState(hash);

在我的AJAX代码中,我必须添加另一行:

$.ajax(hash);

这当然会导致在所有支持通过pushState()提交的非IE浏览器中出现双重提交。

我能做些什么来避免这些双重提交?

仅当history.pushState本机不支持时,才在条件语句中调用$.ajax(hash);

if (!history.pushState) {
   $.ajax(hash);
}

我还建议使用一个唯一的包装器函数来重构代码,该函数接受哈希作为参数,并使用必要的逻辑,例如

var pushStateWrapper = function(hash) {
    if (!history.pushState) {
       $.ajax(hash);
    }
    else {
       $.bbq.pushState(hash);
    }
}