首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在grails控制器中识别ajax请求或浏览器请求

在grails控制器中识别ajax请求或浏览器请求
EN

Stack Overflow用户
提问于 2009-03-20 05:16:53
回答 3查看 11.8K关注 0票数 17

我正在开发一个grails应用程序,其中使用了很多ajax.If的请求是ajax调用,然后它应该给出响应(这部分工作),然而,如果我在浏览器中键入网址,它应该会把我带到主页/索引页,而不是请求的page.Below是示例gsp代码的ajax调用。

代码语言:javascript
复制
<g:remoteFunction action="list" controller="todo" update="todo-ajax">

<div id ="todo-ajax">
//ajax call rendered in this area
</div>

如果我们在浏览器地址栏中输入http://localhost:8080/Dash/todo/list,控制器应该重定向到http://localhost:8080/Dash/auth/index

如何在控制器中进行验证。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-03-20 09:22:15

在您的BootStrap.init闭包中添加此动态方法是相当常见的做法:

代码语言:javascript
复制
    HttpServletRequest.metaClass.isXhr = {->
         'XMLHttpRequest' == delegate.getHeader('X-Requested-With')
    }

这允许您通过执行以下操作来测试当前请求是否为ajax调用:

代码语言:javascript
复制
if(request.xhr) { ... }

最简单的解决方案是在您的todo操作中添加类似以下内容:

代码语言:javascript
复制
if(!request.xhr) { 
    redirect(controller: 'auth', action: 'index')
    return false
}

您还可以使用过滤器/拦截器。我已经构建了一个解决方案,在这个解决方案中,我使用自定义注释注释了所有仅限ajax的操作,然后在过滤器中对其进行了验证。

grails-app/conf/BootStrap.groovy的完整示例:

代码语言:javascript
复制
import javax.servlet.http.HttpServletRequest

class BootStrap {

     def init = { servletContext ->

        HttpServletRequest.metaClass.isXhr = {->
            'XMLHttpRequest' == delegate.getHeader('X-Requested-With')
        }

     }
     def destroy = {
     }
} 
票数 34
EN

Stack Overflow用户

发布于 2015-06-05 16:56:08

从Grails1.1开始,向request对象添加了一个xhr属性,允许您检测AJAX请求。下面是它的用法示例:

代码语言:javascript
复制
def MyController {

  def myAction() {
    if (request.xhr) {
      // send response to AJAX request  
    } else {
      // send response to non-AJAX request
    }
  }
}
票数 6
EN

Stack Overflow用户

发布于 2009-03-20 05:19:56

通常的方法是让ajax例程向请求添加一个头或查询字符串,并对此进行检测。如果您正在为ajax使用一个库,那么它可能已经提供了这个功能。

看起来您正在使用prototype,它添加了一个X-Requested-With header set to 'XMLHttpRequest';检测到它可能是您最好的选择。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/665067

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档