首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Grails:如何使用jQuery和ajax向控制器发送数据

Grails:如何使用jQuery和ajax向控制器发送数据
EN

Stack Overflow用户
提问于 2017-04-21 01:06:42
回答 2查看 3.5K关注 0票数 0

我试图使用ajax发布一个事件的评论,以避免页面重新加载。这是我张贴评论的表格。

代码语言:javascript
复制
<g:form >
 <g:textArea class="form-control" id="review" name="comment" value="${review?.comment}"></g:textArea>

 <span class="star-rating star-5">
     <g:radio name="rating" id="rating-1" value="1"/><i></i>
     <g:radio name="rating" id="rating-2" value="2"/><i></i>
     <g:radio name="rating" id="rating-3" value="3"/><i></i>
     <g:radio name="rating" id="rating-4" value="4"/><i></i>
     <g:radio name="rating" id="rating-5" value="5"/><i></i>
 </span>
 ...
 <input type="submit" id="comment-ajax"/>

我的ajax:

代码语言:javascript
复制
  $( "#comment-ajax" ).click( function (){
    var eventID = document.getElementById('eventId').innerText;

      $.ajax( {
          url: "${createLink(controller:'review',action:'saveReview')}",
          type: "POST",
          data: { comment: $('.review-textarea').val(), rating: $('input[name=rating]:checked').val(), event:eventID  },

          success: function() {
             alert("success");
          },
          error: function() {
             alert("fail");
          }
      } );
  });

ReviewController:

代码语言:javascript
复制
def saveReview(Review review) 
{
    User user = User.get(session.user.id)
    def comment = review?.comment
    def rating = review?.rating

    review.save flush:true
}

审阅域:

代码语言:javascript
复制
class Review {

String comment
int rating

static belongsTo = [event:Event, user:User]

出现成功警告,但没有数据插入到我的数据库中。

EN

回答 2

Stack Overflow用户

发布于 2017-04-21 05:28:02

一个使用一些Grails内容的节点示例。

下面我们所做的就是用一些bootstrap样式和一条消息在成功失败时更新div,我们还可以从操作中传回一些数据,如果需要的话,还可以用它做一些事情。

当ID为'save‘的按钮被点击时,javascript被调用。如果一个元素以句点为前缀,您将看到save是以#为前缀的,这意味着带有标识符的DOM元素。这意味着带有CSS类的元素,请阅读更多关于选择器here的内容。

您可以使用data部分将数据传回控制器,在下面的示例中,我们使用serialize传回ID为eventForm的表单的所有元素,因此您将从控制器中的参数中获得'eventName‘和'eventDescription’,因为这是我们表单中的两个输入

在您的示例中,您试图从gsp中的某个东西获取用户名,我将在控制器中从springSecurityService获取此用户名。

普惠制:

代码语言:javascript
复制
<head>    
    <script type="text/javascript">
        $( document ).ready( function() {
            $( "#save" ).click( function ( event ){
                $.ajax( {
                    url: "${g.createLink( controller: 'review', action:'saveAjax')}",
                    type: "post",
                    data:  $( '#eventForm' ).serialize(),
                    success: function() {
                        $( "#resultDiv" ).addClass( 'alert alert-info' ).append( 'Successfully saved event' )
                    },
                    error: function(xhr) {
                        $( "#resultDiv" ).addClass( 'alert alert-danger' ).append( 'Error saving event' )
                    }
                } );
            });
        });
    </script>
</head>

<body>

    <div id="resultDiv"></div>

<g:form id="eventForm" name="eventForm">
    Event name: <input type="text" id="eventName" name="eventName" value="${params.eventName}" />
    Event description: <input type="text" id="eventDescription" name="eventDescription" value="${params.eventDescription}" />
    <button type="button" id="save" name="save">Save</button>
</g:form>

</body>

ReviewController:

代码语言:javascript
复制
def saveAjax() {
    def eventName = params.eventName
    def eventDescription = params.eventDescription

}
票数 2
EN

Stack Overflow用户

发布于 2017-04-21 02:11:13

只有一个简单的例子

代码语言:javascript
复制
$.ajax({
            url: "/YourController/YourAction",
            type: 'POST',
            dataType: 'json',
            data: { val1: 1, val2: 2, val3: 3 },
            success: function (json) {

            }
        });

在您的操作中,您返回一个Json,如下所示:

代码语言:javascript
复制
return Json(new { success = true, message = "Message"}, JsonRequestBehavior.AllowGet);

或者一些聪明的东西,像这样,你的控件有'form-control‘类。这有点类似于form.serialize(),但在这里您可以自定义数据的格式。

代码语言:javascript
复制
var selector = 'input.form-control, select.form-control, input[type="hidden"], textarea.form-control'

var formData = {};

$(selector).each(function () {
    var value = '';
    if ($(this).attr("type") == "checkbox") {
        value = $(this).attr("checked") == "checked";
    }
    else if ($(this).attr("type") == "radio") {
        if (formData[$(this).attr('id')] == undefined) {
            value = $("#" + $(this).attr("id") + ":checked").val();
        }
        else
            return true;
    }
    else {
        value = $(this).val().toUpperCase();
    }

    formData[$(this).attr('id')] = value;
});

$.ajax({
        type: "Post",
        dataType: 'json',
        url: "/YourController/YourAction",
        data: formData,
        traditional: true,
        success: function (json) {

                }
});

如果你有任何要求,就问=)

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

https://stackoverflow.com/questions/43525751

复制
相关文章

相似问题

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