Grails中使用Ajax

grails中很好的集成了Ajax,这里介绍利用Jquery的 getJSON方法进行Ajax异步传输。

使用步骤:

  • 引入Jquery(.gsp 页面中引入 jquery.js)
<script type="text/javascript" src="${resource(dir: ‘assets/js‘, file: ‘jquery.js‘)}"></script>
  • Javascript 脚本中添加Ajax调用方法
   function isProductionNameExist(o) {
       var productName = "test";
       var mode = "test";
           $.getJSON("isProductionNameExist",  // action in controller
                   {productName: productName,  // params pass to action, you can use ‘null‘ when no params
		    mode: mode},
                   function (data) {           // call-back function when ajax call complete
                       alert(data.isExist);
                   });
       }
   }

  

  • Controller中action
  def isProductionNameExist(){
      def productName = params.productName        def mode = params.mode
      def status = "Y"
      def ret = [isExist: status]
      render ret as JSON
  }
  • 触发Js函数
<g:textField name="name" onblur="isProductionNameExist(this)"/>

  

可能存在的问题:

1. 无法触发controller中action

params中的id参数会影响, 如下,id属性

<g:textField id="${xxxInstance.attr}" name="name" onblur="isProductionNameExist(this)"/>

另grails自动生成的增删查改页面跳转时会隐式传id,也会导致ajax无法触发action

2. 乱码

controller/action中拿到ajax传过去的数据都是乱码,由不同浏览器对于ajax请求不同的处理方式造成。例如:在Ajax调用中,IE总是采用客户端操作系统默认编码,如GB2312,而Firefox总是采用utf-8编码。

为了避免浏览器对数据进行编码,在数据传送前先用函数对数据进行编码,server拿到数据后再解码。

例子:

 $.getJSON("isProductionNameExist",
           {productName: encodeURIComponent(productName)},
          function (data) {

          });

  def isProductionNameExist(){
      def productName = params.productName.decodeURL()
      def status = "Y"
      def ret = [isExist: status]
      render ret as JSON
  }

  

  
时间: 2024-08-06 11:36:00

Grails中使用Ajax的相关文章

Grails 中AJAX的使用

AJAX是一种很好的技术,Grails中的使用需要GSP.控制器两方面的配合: 首先,在GSP中设置一个区域,用于显示——关键是设置ID.比如: <div id="systemMenuEditDiv"> </div> 然后,GSP中要设置 <g:remoteLink action="createSystemMenu" update="[success:'systemMenuEditDiv', failure:'error']&

asp.ne中使用ajax和controller进行通信问题记录

为了页面显示和后端处理分离,使用了html+ajax+mvc的形式进行处理. 在这其中遇到的问题记录: 1. 在使用ajax向controller请求数据的时候,"get"方法会缓存上一次的请求,导致controller方法不能被debug跟踪到,开始以为是vs出错了,到后来才搞清楚. 解决方法:请求controller路径时加上随机数,或者使用"post"方法. 2. 在使用"POST"方法时,IE11要小心处理,因为ie会出现怎么都执行不了的

jQuery中对AJAX操作的封装函数

jQuery提供了6个简化AJAX操作的函数,每个都可以代替元素AJAX中的四步代码! (1)$('xxx').load()         jQuery对象函数 (2)$.get()                   jQuery全局函数 (3)$.post()                 jQuery全局函数 (4)$.getScript()          jQuery全局函数 (5)$.getJSON()           jQuery全局函数 (6)$.ajax()     

深入理解ajax系列第九篇——jQuery中的ajax

前面的话 jQuery提供了一些日常开发中需要的快捷操作,例如load.ajax.get和post等,使用jQuery开发ajax将变得极其简单.这样开发人员就可以将程序开发集中在业务和用户体验上,而不需要理会那么繁琐的XMLHTTPRequest对象.jQuery对ajax操作进行了封装,在jQuery中$.ajax()属性最底层的方法,第2层是load().$.get()和$.post()方法,第3层是$.getScript()和$.getJSON()方法.下面将详细介绍jQuery中的aj

JQuery中的Ajax(六)

一:Ajax请求jQuery.ajax(options) load(url,[data],[callback])jQuery.get(url,[data],[callback]) jQuery.getJSON(url,[data],[callback]) jQuery.getScript(url,[callback]) jQuery.post(url,[data],[callback]) 1.jQuery.ajax(options)通过 HTTP 请求加载远程数据.jQuery 底层 AJAX

在 PHP 中结合 Ajax 技术进行图片上传

前面几则日志中讲述了在 PHP 中上传文件,相信大家对 PHP 中如何进行文件上传已经初步掌握.本文来继续探讨在 PHP 中上传文件的技术,不同的是,本次上传将仅限于图片文件的上传,并且将采用 Ajax 技术. 本例将要实现这样的效果:当用户选择图片,开始上传后,后台上传完成时,随即会显示到当前页面.由于,从开始上传到上传完成,再到图片显示均在一个页面上 完成(从表面上看).所以使用 Ajax 技术是必须的.但如何使用这些操作在一个页面上来完成呢?考虑到这样的情况,当文件开始上传后,便开始打开

jquery中的ajax参数

jquery中将ajax封装成了函数,我们使用起来非常方便,jquery会自动根据内容选择post还是get方式提交数据,并且会自动编码,但是要想完全掌握jquery中的ajax,我们必须将它的各个参数记住: 1.url    strng   发送请求的地址 2.type  string   请求方式(post或get,默认get),其他http请求方法,比如:put和delete也可以使用,但只有部分浏览器支持. 3.timeout   number    设置请求超时时间(毫秒).此设置将覆

项目中关于ajax jsonp的使用

项目中关于ajax jsonp的使用,出现了问题:可以成功获得请求结果,但没有执行success方法总算搞定了,记录一下 function TestAjax() {    $.ajax({        type : "get",        async : false,        url : "ajaxHandler.ashx", //实际上访问时产生的地址为: ajax.ashx?callbackfun=jsonpCallback&id=10   

JavaScript中的ajax是何物?

一.解释: -------------------------------------------------------------------------------------------------------------------------------------------------------------- ajax是通过http请求获取资源(数据)的一种技术. http是一种无记忆的请求,请求结束后不会保留请求的记忆. 通过在后台与服务器进行少量数据交换,AJAX 可以使网