0

我在客户端有这个jquery函数......

$('#add-car').on('click', function() {
             $.ajax({
                     type: 'POST',
                     url: 'cars/',
                     data: {brand: 'brand', model: 'model', price: 100,
                           registryYear:1999},
                     success: function(data) { console.log(data)},
                     dataType: 'json'
                   });
            });

而这个 Grails 代码在服务器端

    class UrlMappings {

   static mappings = {
           "/cars/$id?"(controller: "cars") {
                   action = [GET:"list", POST:"save", DELETE:"delete", PUT:"edit"]
           }
           "/$controller/$action?/$id?"{
                   constraints {
                           // apply constraints here
                   }
           }

           "/"(view:"/index")
           "500"(view:'/error')
   }

}

 import grails.converters.JSON

class CarsController {

 def index() {
     render ( Car.findAll() as JSON )
 }

 def save() {
     def json = request.JSON
     def car = new Car(json)
     car.save()
     render (json)
 }

 def delete() {
     def car = Car.findById(params.id)
     car?.delete()
     render (car as JSON)
 }

 def edit() {
     def car = Car.findById(params.id)
             bindData(car, request.JSON)
     render (car.save() as JSON)
 }
 }

但是当按下按钮#add-car 时,它什么也没有返回......我做错了什么?

4

2 回答 2

0

好吧,我没有在 grails 中编码,
但您最接近的 url 映射似乎是这个"/cars/$id?"
,我假设需要一个 ID,但是从您的 javascript 代码中,您没有发回任何名为Id

于 2012-05-22T07:34:28.447 回答
0

这是关于调试方法的。

请检查请求是否到达您的服务器。您可以通过将一些日志“在此处运行”添加到您在控制器上请求的操作中来做到这一点。

如果打印了“在此处运行”,则请求已发送,您必须找出服务器未返回预期结果的原因。

如果未打印日志,则意味着您必须重新检查您的 javascript。使用Firebug可能有助于发现一些棘手的 javascript 错误。


顺便说一句,我认为你应该在你的 javascript 中使用“jQuery”而不是“$”符号。这是为了避免与其他库发生冲突,例如:

jQuery('#add-car').click(function() {
....
            });
于 2012-05-22T07:22:10.637 回答