0

コントローラー アクションから JSON を返そうとしています。これが私のアクションメソッドです

import grails.converters.JSON
....    
def getDoctorList(id){

    def serviceNo = id ?: "1"


    def service = ServicePoint.findByNumber(serviceNo)

    def jsonMap=service?.staff.collect{
         [id: it.id , name: it.firstName +" "+ it.lastName]             
    }

    render jsonMap as JSON

   }

最後の行で jsonMap を JSON に変換すると、ページがレンダリングされず、レンダリングされた JSON ページとして削除すると、すべて正常に動作します。このコードの何が問題になっていますか?

================================================== ===============================

gsp ページをレンダリングする必要はありません。マップを json としてレンダリングして、gsp ページのドロップ ボックスを埋めるために使用する必要があります。コードで(JSONとして)使用すると、ajaxによってレンダリングされたページが表示されなくなりました。削除すると、すべて正常に動作します。

4

2 に答える 2

1

JSON をレンダリングしても、アクションに関連付けられたテンプレートはレンダリングされません。慣例を想定し、getDoctorList.gsp がある場合、次のように動作します。

def getDoctorList(id){
 //.. logic here
 // leaving no render method will default to convention
 // rendering getDoctorList.gsp
}

def getDoctorList(id){
 //.. logic here
 // supplying a render with a view will render that view
 render view: 'doctor_list' // assumes doctor_list.gsp
}

def getDoctorList(id){
 //.. logic here
 // Rendering JSON will not use a template at all
 render jsonMap as JSON
}

これは機能しますが、それがあなたが望むものであるとは思えません:

def getDoctorList(id){
 //.. logic here
 [jsonMap: jsonMap as JSON]
}

これにより、jsonMap がリクエスト パラメータとして getDoctorList.gsp にプッシュされます。一般的に言えば、JSON データのレンダリングは通常 ajax リクエストへの応答です。

于 2013-02-13T22:05:41.680 に答える
0

ではなくrender jsonMap as JSON、しかしreturn jsonMap as JSON。最初のケースでは、ヘッダーに返さtext/htmlれ、 Grails はそれを に設定します。Content-typereturnapplication/json

于 2013-02-14T12:25:37.820 に答える