2016-05-20 82 views
0

我有用jQuery編寫的簡單的ajax調用。它將一個字符串傳遞給服務器,服務器返回一些json數據。如何更改URL然後刷新頁面(Safari/Firefox)

$.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>'); 
      } 
     } 
    }); 

我想要發生的事情是當用戶點擊該鏈接(「標題」)時,要重新加載該網頁的頁面。請記住,當前頁面是它想要重定向到的頁面,而是在URL中添加一個新的散列(實質上是用新內容重新加載頁面上的所有內容)。這在Chrome中完美運行。在Safari和Firefox中,只需重新加載當前頁面,無論您在該列中單擊哪個鏈接(有多個不同URI的鏈接)。如果我取出onClick事件,則URL會更改,但頁面不會重新加載。

我已經嘗試使用window.location.replace('new url here')將onClick事件更改爲自定義函數,但它簡單地不做任何事情。任何幫助表示讚賞。

回答

0

嘗試後無數的解決方案,無論是在onClick事件中,還是在ajax調用的HTML中直接更改,我發現了一個更簡單的jQuery本地解決方案。

外Ajax調用的,我用jQuery的內置 'onhashchange' 事件:

$(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中運行。

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出方的點擊,而是這個的onClick中有一個函數執行 - 處理程序,點擊