2016-05-20 2 views
0

У меня есть простой вызов ajax, написанный в jQuery. Он передает строку на сервер, и сервер возвращает некоторые данные 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. Имейте в виду, что текущая страница - это страница, на которую он хочет перенаправить, но с новым хешем в URL-адресе (в основном, перезагрузка всего содержимого на странице с новым контентом). Это отлично работает в Chrome. В Safari и Firefox он просто перезагружает текущую страницу, независимо от того, какую ссылку вы нажимаете в столбце (есть несколько ссылок с разными URI). Если я выберу событие onClick, URL-адрес просто изменится, но страница не перезагрузится.

Я попытался изменить событие onClick на пользовательскую функцию, используя window.location.replace ('new url here'), но он просто ничего не делает. Любая помощь приветствуется.

ответ

0

После попытки многочисленные решения, как в контексте событий onClick, так и непосредственно меняющихся в HTML-вызове ajax-вызова, я нашел гораздо более легкое решение, родное jQuery.

Вне вызова Ajax, я использовал JQuery встроенный в 'onhashchange' событие:

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

И тогда HTML в вызове Ajax выглядит следующим образом:

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

Ранее, в коде в вопросе в Chrome страница перезагрузится после нажатия элемента и обновит страницу новым контентом. Но в Safari и FireFox перезагрузка страницы появилась до того, как был запущен новый контент, чтобы перезагрузить страницу с тем же контентом.

Теперь новый контент (хеш в URL-адресе) вынужден распознаваться и только после этого перезагружается страница. Протестировано и работает в Chrome, FireFox и Safari.

0

Есть 2 вещи я могу вещь:

не используют относительные адреса. /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 есть функция выполнения - обработчик щелчка

Смежные вопросы