如何更改URL然后刷新页面(Safari / Firefox)

时间:2016-05-20 23:40:42

标签: javascript jquery ajax firefox safari

我有一个用jQuery编写的简单的ajax调用。它将一个字符串传递给服务器,服务器返回一些json数据。

$.ajax({
        url: ...,
        dataType: 'json',
        success: function(data) {
            for (var d in data) {
                var title = $('<a onClick="location.reload()" href="/player#v='+ data[d].content.id+'" "><p>'+ name +'</p></a>');
            }
        }
    });

我想要发生的是用户点击该链接(&#34;标题&#34;),以便在该新网址上重新加载该页面。请记住,当前页面是它要重定向到的页面,但在URL中使用新的哈希(实际上,使用新内容重新加载页面上的所有内容)。这在Chrome中完美运行。在Safari和Firefox中,它只是重新加载当前页面,无论您在列中单击哪个链接(具有不同URI的多个链接)。如果我取出onClick事件,则URL只会更改,但页面不会重新加载。

我尝试使用window.location.replace(&#39; new url here&#39;)将onClick事件更改为自定义函数,但它很简单。任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:0)

我可以做两件事:

不要使用相对网址。 /player#v='+ data[d].content.id+'" "

试试这段代码:

$.ajax({
  url: ...,
  dataType: 'json',
  success: function(data) {
    for (var d in data) {
      var title = $('<a onClick="javascript: location.href=this.src ;" href="/player#v='+ data[d].content.id+'" "><p>'+ name +'</p></a>');
    }
  }
});

我建议反对该解决方案,而不是将jquery绑定到click,而不是这个onClick有一个函数执行 - click的处理程序

答案 1 :(得分:0)

在onClick事件的上下文中尝试了大量的解决方案并直接在ajax调用的HTML中进行更改后,我找到了一个更简单的jQuery原生解决方案。

在ajax调用之外,我使用了jQuery的内置&#39; onhashchange&#39;事件:

$(window).on('hashchange', function() {
        location.reload();
});

然后ajax调用中的html如下所示:

var title = $('<a href="/player#v='+data[d].content.id+'"><p>'+ name +'</p>   </a>');

以前,在问题的代码中,在Chrome中,一旦点击项目并使用新内容刷新页面,页面就会重新加载。但是在Safari和FireFox中,页面重新加载在新内容被触发之前,因此重新加载具有相同内容的页面。

现在,强制识别新内容(URL中的哈希),然后才重新加载页面。经过测试,适用于Chrome,FireFox和Safari。