2012-03-29 11 views
0

これは再発/古典的なトピックですが、これまで私を助けてくれたものは見つかりませんでした。 コントローラからマップをレンダリングしようとしています。これはAjaxリクエストの結果であり、Javascript関数 'onSuccess'によって「食べられる」はずです。それはまさにGrails documentationに提供された例として、私には見えますGrails - JSONを使用してコントローラからAjax経由でマップをレンダリング

import grails.converters.JSON 

class ProjectController { 

    def addVideo() { 
     ... 
    def videoMap = [urlAccepted: videoList[0], provider: videoList[1], videoId: videoList[2], videoTag: videoList[3]] 
    render videoMap as JSON 
    } 

<g:javascript> 
function updateVideoLoad(e) { 
var map = eval("("+e.responseText+")") // evaluate the JSON 
$('#resultsChecker').html(map.urlAccepted + ' - ' + map.provider + ' - ' + map.videoId + ' - ' + map.videoTag) 
} 
</g:javascript> 
<g:formRemote name="myForm" update="" url="[controller: 'project', action:'addVideo']" onSuccess="updateVideoLoad(e)">   
    ...  
</g:formRemote> 

ここに私のコントローラである:ここでは

は私のJavascriptを.gspビューがあります。 しかし、動作しません。ブラウザのコンソールでは、私はg:remoteFormから

Uncaught ReferenceError: e is not defined 

を取得します。

ご提案は大歓迎です。 ありがとうございます。

+0

これはコードまたは質問のタイプミスですか? != dbrin

+0

申し訳ありません、投稿を編集して修正しました。これは元のコードではありませんでした。 –

答えて

1

これが動作しているようですか?

+0

http://grails.org/doc/2.2.0/ref/Tags/formRemote.htmlにはイベントのドキュメントが含まれています –

1

ここでは推測していますが、ドキュメントの間違いのようです。

onSuccess="updateVideoLoad(e)" 
          ^^^ 

本当にあるべき:私はこの部分があること期待

<form onsubmit="jQuery.ajax({type:'POST',data:jQuery(this).serialize(), url:'/project/addVideo',success:function(data,textStatus){updateVideoLoad(e);},error:function(XMLHttpRequest,textStatus,errorThrown){}});return false" 
    method="post" action="/project/addVideo" id="myForm"> 
:(Grailsの2.0の下で)生成されたコードを見てみると

onSuccess="updateVideoLoad(data,textStatus)" 
          ^^^^^^^^^^^^^^^^^ 

、これらは返さに使用される変数です

生成されたコードのsuccessプロパティを見てください。これらのjavascriptのイベントにドキュメントを取得するための場所があります

<g:formRemote name="myForm" update="" url="[controller: 'project', action:'addVideo']" onComplete="updateVideoLoad(XMLHttpRequest)"> 

onCompleteonSuccess、...):

+0

ありがとうございました。 私はそのように関数を変更しました: 'onSuccess =" updateVideoLoad(data、textStatus) "'と 'function updateVideoLoad(data、textStatus){...}'。 Uncaught TypeError:undefined( "data")のプロパティ 'urlAccepted'を読み取れません。 実際にJavaScript関数を呼び出すようですが、まだJSONマップを解析できません。 –

0

これはドキュメントのバグです。 JQuery(Grails 2.0のデフォルト)を使用している場合、変数は 'data'でなく 'controller'から返されたJSONオブジェクトを含み、docsのように評価する必要はありません。

0

私は同じ問題がありましたが、私はDojoを使用しています。

あなたは道場を使用する場合は、変数名「応答」を使用shoud:

onComplete="updateVideoLoad(response)" 

それは道場のために正常に動作します。

関連する問題