Этот способ аналогичен приведенному выше решению, но реализован по-разному
.social_icon -> некоторый класс с CSS
<div class="social_icon" id="SOME_ID" data-url="SOME_URL"></div>
$('.social_icon').click(function(){
var url = $(this).attr('data-url');
var win = window.open(url, '_blank'); ///similar to above solution
win.focus();
});
Это - настоящая обычная практика для добавления этого динамического метода в закрытии BootStrap.init:
HttpServletRequest.metaClass.isXhr = {->
'XMLHttpRequest' == delegate.getHeader('X-Requested-With')
}
это позволяет Вам тестировать, если текущий запрос является вызовом ajax путем выполнения:
if(request.xhr) { ... }
простое решение состоит в том, чтобы добавить что-то вроде этого к Вашему todo действию:
if(!request.xhr) {
redirect(controller: 'auth', action: 'index')
return false
}
Вы могли также использовать фильтры/перехватчики. Я создал решение, где я аннотировал все действия, которые являются ajax-только с пользовательской аннотацией и затем проверили это в фильтре.
Полный пример grails-app/conf/BootStrap.groovy:
import javax.servlet.http.HttpServletRequest
class BootStrap {
def init = { servletContext ->
HttpServletRequest.metaClass.isXhr = {->
'XMLHttpRequest' == delegate.getHeader('X-Requested-With')
}
}
def destroy = {
}
}
Нормальный метод должен иметь ajax стандартную программу, добавляют заголовок или строка запроса к запросу и обнаруживают это. Если Вы пользуетесь библиотекой для ajax, это, вероятно, уже обеспечивает это.
похоже на использование прототипа который добавляет набор заголовка X-Requested-With к 'XMLHttpRequest'; обнаружение, которое является, вероятно, Вашим лучшим выбором.