- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我使用了(https://github.com/browserstate/history.js)并且有一段这样的代码
History.Adapter.bind(window, 'statechange', function() {
var State = History.getState();
alert('Inside History.Adapter.bind: ' + State.data.myData);
});
function manageHistory(url, data, uniqueId){
var History = window.History;
if ( !History.enabled ) { return false; }
History.replaceState({myData: data}, null, '?stateHistory=' + uniqueId);
}
如果我调用 manageHistory()
在我的 ajax 调用之后,然后 History.Adapter.bind
正确调用回调方法。但是,如果我单击浏览器后退,然后单击前进按钮,导致页面导航从 B 到 A,然后 A 返回 B,回调内部方法 History.Adapter.bind
不会被调用。这发生在 chrome 和 IE9 上。任何人都知道如何解决这个问题,我需要得到 State
单击浏览器后退然后前进,以更新我的 DOM。请帮忙
注意:我使用 1.7.1 版本的 jquery.history.js 用于 html4 浏览器 IE9
更新(2013 年 5 月 3 日):多谈谈我的要求
抱歉,我正忙于其他任务,直到现在我有时不得不看这个问题。所以oncomplete
在 ajax 调用中,我获取了返回给我的信息,并将其插入状态。我的要求是:如果我从页面 A 导航到页面 B,然后在页面 B 上,我执行许多导致 DOM 操作的 ajax 请求(让每个导致 DOM 操作的 ajax 请求称为 state
)。如果我点击后退按钮,我应该返回到页面 A,如果我点击前进按钮,我应该转到页面 B,我之前的状态是上次。
所以我的想法是,oncomplete
在我的 ajax 请求中,我会用我当前的状态替换历史上的最后一个状态(我的 json 对象是我从 ajax 请求返回的 html)。如果我使用推送状态,假设我在页面 B,然后单击一个按钮,我的页面现在变为 aaa
, 我 pushState aaa
.然后,如果我点击其他按钮,我的页面现在变为 bbb
, 我 pushState bbb
.如果我现在点击后退按钮,我仍然会在页面 B,我的状态在 History.Adapter.bind(window, 'statechange', function() {})
中。显示为 aaa
,如果我再次单击后退按钮,我会转到页面 A。我不希望出现这种情况。我希望如果我在状态为 bbb
的页面 B 上,然后单击后退,我将转到页面 A,如果我单击前进,我将转到状态为 bbb
的页面 B。 .我希望这更有意义。请帮忙
最佳答案
你需要做的事情如下:
pushState
。replaceState
,将信息替换为有关您当前状态的信息。(您需要在某些变量中手动跟踪上一页)
这意味着如果您从 A 转到 B (pushState) 到 B 的新状态 (replaceState),后退按钮(转到 A 的状态信息)和下一步前进(转到 B 的最新状态)。此外,如果您第一次打开 A,则需要使用有关 A 状态的信息执行 replaceState
,这样 A 至少会有一些状态(否则它将有一个空数据对象)。
查看 this answer 可能会有用我的,这只是关于使用 pushStates
构建有序历史堆栈的方式。当然不完全是您想要的,但它的编写要简单一些,再加上这个答案中的信息,它应该能让您获得想要的行为。
关于javascript - 浏览器后退和前进按钮不使用 history.js 的 statechange 事件调用回调方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16164210/
看来 statechange 事件中的这一行: $('#content').load(State.data.home_page); ...导致同一页面加载多次,从而导致我的网站出现故障。我可以做什么来
我的 Controller 中有一个作用域函数,其中包含一些异步函数。一切完成后,它会改变状态。 Controller .js $scope.test = function () { asyn
在我的 Qt 应用程序中,我想使用复选框在切换为未选中时执行 A,并在切换为选中时执行 B。该复选框与 foo(int) Hook 。 connect(myCB, SIGNAL(stateChange
MySqlConnection.StateChange 是如何工作的? 我有以下代码。 conn.StateChange += ConnectionStateChanged; private void
为什么代码在JSpinner的change事件中进入了两次? private javax.swing.JSpinner spinner = new javax.swing.JSpinner() spi
我得到了 A 类,点击按钮后: if (source == buttonA){ new classB(this); } 此外,A类有一个名为的函数 function(int a);
如果客户端关闭,QTcpSocket是否会立即收到stateChanged信号? 最佳答案 您可以在服务器端使用客户端信号(disconnected())来接收状态变化信号。 例如: 在服务器端 co
请原谅,因为我知道这可能是一个非常简单的问题,但我需要另一双眼睛。我的 GUI 上有一个复选框,复选框的状态(开/关)将直接改变我的中断服务例程。这看起来 super 简单,但我不能使用: this-
我有一个可以同时从数百个线程访问的单例数据库类。每个线程都有自己的连接。由于我无法控制线程数,所以我需要限制并发连接数。我决定使用如下所示的信号量。现在,连接总是在 using block 中分配,因
我正在使用 history.js 来处理后退按钮。在 history.js 中,每当我执行 pushstate 时,statechange 就会触发。为什么? 最佳答案 想补充一点,是的,这是 His
我有一个包含 iframe 的页面。 iframe 可以接受用户的输入(通过按钮点击或菜单选择)并相应地显示内容。 我需要的是,当用户操作 iframe 时,浏览器将每组 iframe 参数推送到历史
我有一个 Map.Entry 的列表这是我正在循环的,并且对于每一个,制作一个 JLabel/JSpinner代表该特定条目。 我怎样才能做到,当 ChangeListener在 JSpinner 上
我正在使用 History.js,一切正常。 URL 中包含引号时除外。 然后,页面无法正常工作,而是加载并突然触发 statechange 事件并调用我的绑定(bind)函数。 当用户在 Faceb
我在 QT Slot 函数中针对 stateChanged 信号有以下情况: void ui::myslot(int state) { ... if (condition) { che
QAbstractSocket stateChanged()-Signal 的正确使用/实现是什么? 主要.cpp: #include #include #include int main(in
所以我从 PyQt4 的列表中添加复选框。但我无法找到一种方法来为我的 Window 类中的每一个使用 stateChanged。 这是从列表元素添加它们的函数: def addCheckbox(
我正在使用 asmack xmpp 客户端构建一个聊天应用程序。聊天工作正常,我已经实现了 ChatStateListener 但 stateChanged 方法从未被调用。目前为了获得撰写状态,我正
我有带有淡入淡出动画的 JTabbedPane,当用户单击选项卡时执行。为了处理动画,我覆盖了 stateChanged方法。 public class AnimatedJTabbedPane ext
我需要在 WPF 应用程序最小化之前处理它,而不是在它已经存在时。 我在 Window 对象 StateChanged 上找到了,但是当 Window 对象已经处于最小化状态时它会触发,那么为时已晚。
我觉得答案就在那里,但我不知道该查找什么。我研究了 defer 和 promise 但如果我希望它适用于自身,我不确定如何应用它。 如果 update_content() 正在运行,我不希望在第一次完
我是一名优秀的程序员,十分优秀!