Javascript jquery移动更改页面和刷新页面
我是网络开发新手,已建立了一个网站,包括:Javascript jquery移动更改页面和刷新页面,javascript,url,jquery-mobile,Javascript,Url,Jquery Mobile,我是网络开发新手,已建立了一个网站,包括: index.html graph.html myScript.js graph.html正在根据给定参数构建内容,该参数在主页(index.html)中指定。看了一眼之后,我在我的myScript.js中点击一个按钮时,出现了这个changePage调用: $.mobile.changePage('graph.html', { dataUrl: 'graph.html?ip='+id, data: { 'ip': id }, transition:
- index.html
- graph.html
- myScript.js
index.html
)中指定。看了一眼之后,我在我的myScript.js
中点击一个按钮时,出现了这个changePage调用:
$.mobile.changePage('graph.html', { dataUrl: 'graph.html?ip='+id, data: { 'ip': id }, transition: "slide", changeHash: true, reloadPage : true} );
因此,id
只是一个字符串(例如:load-21
),我在id
的帮助下进行ajax调用。
生成的URL
如下所示:http://192.168.131.11:18069/CoDEViewTest/#graph.html?ip=load-二十一,
现在,第一个调用可以正常工作,但是如果我在graph.html
页面上点击refresh(F5),我会自动返回主页(index.html
),但我仍然有相同的URL
(http://192.168.131.11:18069/CoDEViewTest/#graph.html?ip=load-21 ). 我想要的行为是重新加载graph.html
。我发现它是有效的,如果我这样调用changePage:
$.mobile.changePage('graph.html?ip=' + id, { transition: "slide", changeHash: true, reloadPage : true} );
http://192.168.131.11:18069/CoDEViewTest/graph.html?ip=load-21
在这种情况下,URL
有点不同(注意:URL
中没有“#”):http://192.168.131.11:18069/CoDEViewTest/graph.html?ip=load-21
在本例中,当刷新页面时,我停留在graph.html
现在我的问题是,这两个电话有什么区别?另外,从我在谷歌搜索后的第一印象来看,我认为第二个电话不是一个好的做法。因此,我希望处理第一个调用,但在刷新页面时,我需要停留在graph.html
感谢要理解这一点,您必须了解jQuery Mobile的工作原理
它使用AJAX将页面加载到DOM中。只有第一页被完全加载,这意味着它的头和正文被加载到DOM中。每个后续的HTML
页面都将被丢弃,基本上只有带有数据角色=“page”
的div将被加载到DOM
。甚至只有一个data role=“page”
div将被加载,其他每个页面div将像页面的其余部分一样被丢弃
如果你仔细想想,这是一种正常的状态。我们已经有了
起始HTML
页面,我们不需要另一个
也就是说,当您将参数从一个HTML
页面发送到另一个页面时,基本上就是将其发送到初始HTML
页面。记住我告诉过你的,后续页面将被丢弃,因此在你的例子中,页面graph.html
不存在,其内容被同化为index.html
。基本上,graph.html中的页面现在是index.html中的页面
让我们更进一步。您已使用reloadPage:true
强制重新加载页面,但从链接的角度来看,这仍然是index.html
。如果你看一下:
http://192.168.131.11:18069/CoDEViewTest/#graph.html?ip=load-21
在/和graph.html
之间有一个散列。这个散列在这里是个问题。这不是一个错误,这只是jQuery Mobile的工作原理。如果在本例中按F5,则将调用index.html
刷新
在你的另一个例子中,情况有点不同。这种情况之所以能够正常工作,主要是因为您正在刷新页面,并且在graph.html
之后设置的参数会阻止jQuery Mobile附加页面散列。此调用充当真实的页面重新加载,最终链接如下所示:
$.mobile.changePage('graph.html?ip=' + id, { transition: "slide", changeHash: true, reloadPage : true} );
http://192.168.131.11:18069/CoDEViewTest/graph.html?ip=load-21
由于#不存在,因此
从jQuery移动内容中完全为空,因此这里没有任何东西可以劫持加载逻辑,因此
将再次重新加载到graph.html
编辑:
我还应该注意到,您的第二个解决方案没有任何问题,但不建议在某些情况下使用它。在您的情况下,它会很好地工作。请记住,有一件事总是有一个标题
内容,这将防止重新加载问题。但有一个主要区别,双方现在都改变了。此时grap.html
已完全加载到DOM
中,当您返回index.html
时,只有其数据角色=“page”
div将加载到DOM
。基本上,解决方案唯一的缺点是,每个HTML
文件只能有一个data role=“page”。在第一种情况下,index.html
可以包含多个页面。谢谢你的好答案,还有一件事:你会建议继续使用第二种方法吗?或者有什么方法可以继续使用第一种方法吗?很抱歉,我没有及早识别我的打字错误,无法更改它。。我的意思是“你现在会…”你仍然可以使用第二种解决方案,但在某些情况下不建议使用它,在你的情况下,它会很好地工作。只要记住一件事,总是有一个头部内容,这将防止重新加载问题。但有一个主要区别,双方现在都改变了。此时grap.html已完全加载到DOM中,当您返回index.html时,只有其数据role=“page”DIV将加载到DOM中。基本上,解决方案唯一的缺点是每个HTML文件只能有一个data role=“page”。在您的第一个案例中,index.html可以包含多个页面