Идентификация ajax запрос или браузер запрашивает в контроллере чаш Грааля

Этот способ аналогичен приведенному выше решению, но реализован по-разному

.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();
   });
17
задан DonX 20 March 2009 в 05:16
поделиться

2 ответа

Это - настоящая обычная практика для добавления этого динамического метода в закрытии 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 = {
     }
} 
34
ответ дан 30 November 2019 в 11:18
поделиться

Нормальный метод должен иметь ajax стандартную программу, добавляют заголовок или строка запроса к запросу и обнаруживают это. Если Вы пользуетесь библиотекой для ajax, это, вероятно, уже обеспечивает это.

похоже на использование прототипа который добавляет набор заголовка X-Requested-With к 'XMLHttpRequest'; обнаружение, которое является, вероятно, Вашим лучшим выбором.

3
ответ дан 30 November 2019 в 11:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: