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
graph.html正在根据给定参数构建内容,该参数在主页(
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可以包含多个页面