当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《在grails控制器中识别ajax请求或浏览器请求》经验,为你挑选了2个好方法。

我正在开发一个grails应用程序,它使用了很多ajax.如果请求是ajax调用那么它应该给出响应(这部分工作),但是如果我在浏览器中键入URL它应该带我到home/index页面而不是请求的page.Below是ajax调用的示例gsp代码.



//ajax call rendered in this area

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

如何在控制器中验证这一点.



1> Siegfried Pu..:

在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 = {
     }
} 


这已添加到Grails 1.1中 - 因此,如果您使用的是该版本或更高版本,则可以立即使用request.xhr.
您需要在BootStrap类中导入类javax.servlet.http.HttpServletRequest.我将在答案中添加一个完整的例子.

2> Dónal..:

从Grails 1.1 xhr开始,向该request对象添加了一个属性,该属性使您可以检测AJAX请求。其用法示例如下:

def MyController {

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

推荐阅读
罗文彬2502852027
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有