将不同的变量传递给同一页面

时间:2011-09-17 16:36:40

标签: javascript html hyperlink browser-history

我正在尝试主要使用html和javascript构建一个Web应用程序。我在app中使用了许多通过url传递的不同变量。

这里有问题,我有一些链接链接到应用程序当前所在的页面,只是更改了变量,但点击链接确实更改了网址值,页面不会更改/重新加载新的使用和href时的值是否有一种干净的方法来强制页面重新加载,如果你链接到当前页面,或更改网址?

目前我正在使用jQuery设置带有新变量的window.location,然后重新加载页面。

另外,我在浏览器上使用后退按钮时遇到了类似的问题。它将更改URL但不刷新页面,因此如果您将变量设置为1,则将其更改为2,即可正常工作,页面将使用变量set o 2重新加载,但如果您使用浏览器历史记录返回url会说你的变量应该是1,但页面的其余部分仍然会像变量那样2,直到你刷新页面。

是否设置了一个页面,以便当您从同一页面转到页面时,它会自动刷新,无论是通过链接还是向前或向后移动浏览器历史记录?

根据请求,这是我遇到问题的代码部分的一部分:

首先是创建html元素onload的代码

var sel_tags=document.getElementsByName("selected_tags")[0];
var temp="";
if(Tags==null)
{
    temp="\<p>All Notes\<\/p>";
}
else//Tags not empty, and there are tag filters
{
    var click= new Array("",a+ AtTagShow);
    var GoTo="PageViewNotes.html?"
    for (var i=0; i < Tags.length; i++) {
        //if we are showing @tags, or a tag is not an @tag
        if(AtTagShow||Tags[i][0]!="@")
        {
            click[0]=t+Tags[i];
            if (temp.length>0)
        {temp+="\<span class=\"spacer\">\/<\/span>"};
    temp+="\<a class=\"selected_tags_label\""+ 
            "href=\""+GoTo+click.join("&")+"\">\<span>"
    +Tags[i]+"\<\/span>\<\/a>"
    }
    };
};
sel_tags.innerHTML=temp;

这是用于设置onclick的jquery代码:

$(".selected_tags_label").live("click",function(){ window.location=(this.href); window.location.reload(); });

此问题的示例网址是: page.html中的标签=#荒谬,#会议和放大器; AtTagShow =真 通过单击url将更改为的rediculous元素: page.html中标签=#荒谬&安培; AtTagShow =真

5 个答案:

答案 0 :(得分:1)

window.location.href="page.html?Tags=#rediculous&AtTagShow=true"

答案 1 :(得分:0)

请查看jQuery History plug-in,了解您的网站是否具有后退/前进历史记录。它有助于在页面上设置状态,根据URL字符串中的查询参数调用数据。

答案 2 :(得分:0)

在现代浏览器(IE8 +,Opera 10.6 +,Fx 3.6 +,Safari 5+)中,您有hashchange个事件。

您可以通过以下方式获得所需的结果,而不是重新加载页面:

<script>
document.onhashchange = function(){
    // do something
}
</script>

MDN可能也会有所帮助。

答案 3 :(得分:0)

如果您正在使用查询参数(URL中的?标记之后的内容),则更改查询参数并将window.location设置为该新URL将导致从服务器加载新页面。

如果您正在使用哈希值(URL标记为#mark int之后的内容),则更改哈希值不会导致新页面加载。

因此,如果您希望每次更改值时都从服务器加载新页面,那么您应该使用查询参数。使用查询参数时,后退和前进也应正常工作。

如果您故意尝试使用哈希值来完成所有这些以避免实际的服务器页面重新加载,那么您将不得不进行更多编码来拦截哈希更改并处理它们。在现代浏览器中,这比使用window.onhashchange事件的旧浏览器更容易。有关详细信息,请参阅this page on MDN

答案 4 :(得分:0)

浏览器重新加载页面,只要通过window.location更新了这些parts of the URL中的任何一个:

  1. 端口
  2. 路径
  3. 查询字符串
  4. 但如果更改fragment_id部分(它只是对当前文档中HTML元素的引用),它将不会加载当前文档。

    因此,根据您的说法,我猜您正在更新fragment id

    这也可能有助于了解window.location.reload()方法执行F5密钥的工作。