【问题标题】:Grails + jQuery: formRemote onSuccessGrails + jQuery:formRemote onSuccess
【发布时间】:2012-11-07 09:17:56
【问题描述】:

我正在努力使用 <g:formRemote/> onSuccess 方法以及如何正确调用我的自定义 JavaScript 函数。

我有以下formRemote 元素:

<g:formRemote name="userSearchRemoteForm"
                      url="[controller: 'userSearch', action: 'ajaxFindUser']"
                      onLoading="jQuery('#userSearchSubContainerHeadLoaderImage').show()"
                      onSuccess="createUserTable(data)"
                      onComplete="jQuery('#userSearchSubContainerHeadLoaderImage').hide()">
....</g:formRemote>

在调试模式下,我看到 Controller 函数 ajaxFindUser 被调用并返回一个像这样的有效 JSON 对象(来自 consoleprettyPrint == true):

{"success": {
"376440": {
  "phone": "",
  "email": "janeDoe@test.com",
  "lastname": "Doe",
  "firstname": "Jane"
},
"4146": {
  "phone": "555-123456789",
  "email": "johnDoe@test.com",
  "lastname": "Doe",
  "firstname": "John"
}
}}

我的JavaScript 函数createUserTable 看起来像这样:

function createGuestTable(data) {
console.log(data);
}

我在 WebDev 工具中看到的只是以下响应:

POST http://localhost:8080/GrailsTest001/userSearch/ajaxFindUser 404 (Not Found)

我的函数永远不会被调用。我还尝试像这样在onSuccess 中调用JavaScript function

onSuccess="createUserTable()"

但我仍然得到相同的结果...

我在这里做错了什么?


编辑: 清除 - 这是我的 Controller 函数:

def ajaxFindUser(UserSearchCommand userSearchCommand) {
    println("... in ajaxFindUser()")
    def result = [:]

    if (userSearchCommand.hasErrors()) {
        result['fail'] = "Error in search values!"
    } else {
        println("... creating values for search...")
        def user = (User) session.getValue(theUser)
        def inputMap = createInputMap(userSearchCommand)

        def foundUsers = userSearchService.findUser(user.connectionID, user.language, inputMap)

        if (foundUsers == null) {
            println("... search returned NULL!")
            result = [:]
            result['fail'] = userSearchService.getError()
        } else {
            println("... search returned VALUES!!")
            result['success'] = foundUsers
        }
    }

    def jResult = result as JSON

    println(".... returning JSON: ${jResult.toString(true)}")
    return jResult
}

【问题讨论】:

  • 表示没有找到页面,如果你把这个链接直接放在浏览器地址栏会有什么结果?
  • 但是如果无法访问控制器函数,为什么会调用它呢?除了JSON 对象之外,我还必须return 吗?我必须告诉控制器不要render 有什么特别的吗?事实上,如果我尝试在浏览器中输入 url,我也会得到 404,但对我来说这很清楚,因为控制器功能所做的就是获取一个 Command 对象并在成功或失败时返回一个 JSON 对象,所以它无法到达 - 还是没有?

标签: jquery forms grails


【解决方案1】:

天哪! 我遇到了这个问题,但根本没有意识到这将是一个问题......

我刚刚将 ajaxFindUser 函数的最后一行从

return jResult

render jResult

使用以下onSuccess 参数

onSuccess="createUserTable(data)"

一切正常!!

对不起……

【讨论】:

    猜你喜欢
    • 2014-03-29
    • 1970-01-01
    • 2017-08-03
    • 2015-03-20
    • 1970-01-01
    • 2011-11-09
    • 2014-12-09
    • 2010-11-17
    • 1970-01-01
    相关资源
    最近更新 更多