我有一个用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事件更改为自定义函数,但它很简单。任何帮助表示赞赏。
答案 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。