2012-11-07 27 views
1

我正在用<g:formRemote/> onSuccess方法掙扎,以及如何正確調用我自定義的JavaScript函數。Grails + jQuery:formRemote onSuccess

我有以下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": "[email protected]", 
    "lastname": "Doe", 
    "firstname": "Jane" 
}, 
"4146": { 
    "phone": "555-123456789", 
    "email": "[email protected]", 
    "lastname": "Doe", 
    "firstname": "John" 
} 
}} 

我的JavaScript功能createUserTable看起來像這樣:

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

所有我在Webdev的工具看到的是如下的迴應:

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

,我的功能不會被調用。我也試着撥打JavaScript functiononSuccess這樣的:

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 
} 
+0

表示未找到頁面,如果您將此鏈接直接放入您的瀏覽器地址欄,結果如何? –

+0

但是,如果控制器功能無法訪問,爲什麼會被調用?我必須'返回'除'JSON'對象之外的東西嗎?我必須告訴控制器不要特別渲染任何東西嗎?實際上,如果我嘗試在瀏覽器中輸入url,我也得到了404,但對我來說這很明顯,因爲所有控制器功能都是取得一個Command對象並在成功或失敗時返回一個JSON對象,所以它無法到達 - 或者沒有? – herom

回答

3

噢,我的! 我面臨的問題,但並沒有意識到這將是在所有問題......

我只是改變了我的ajaxFindUser函數的最後一行從

return jResult 

render jResult 

與以下onSuccess參數

onSuccess="createUserTable(data)" 

,一切正常!

對不起...

相關問題