Grails - рендерит карту из контроллера через Ajax, используя JSON - PullRequest
0 голосов
/ 29 марта 2012

Я знаю, что это повторяющаяся / классическая тема, но я не нашел ничего, что помогло бы мне до сих пор.Я пытаюсь сделать карту из моего контроллера.Это результат запроса Ajax и должен быть «съеден» функцией Javascript «onSuccess».

Вот мой Javascript и .gsp view :

<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>

Вот мой контроллер :

    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
    }

Это выглядит для меня точно так же, как пример, приведенный в документации Grails .Однако это не работает.На консоли браузера я получаю:

Uncaught ReferenceError: e is not defined

из моего g:remoteForm.

Любое предложение приветствуется.Спасибо за вашу помощь.

Ответы [ 4 ]

1 голос
/ 29 марта 2012

Кажется, это работает:

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

Есть ли место, где можно получить документацию по этим событиям javascript (onComplete, onSuccess, ...)?

1 голос
/ 29 марта 2012

Я предполагаю здесь, но это похоже на ошибку в документации.Я ожидаю, что эта часть:

 onSuccess="updateVideoLoad(e)"
                           ^^^

Должно быть действительно:

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

Если посмотреть на сгенерированный код (под Grails 2.0), это переменные, используемые в возвращаемом:

<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">

Посмотрите на свойство success в сгенерированном коде.

0 голосов
/ 09 апреля 2013

У меня была такая же проблема, но я использую Dojo.

Если вы используете dojo, вы должны использовать имя переменной 'response':

onComplete="updateVideoLoad(response)"

Это прекрасно работает дляDojo.

0 голосов
/ 12 мая 2012

Это похоже на ошибку документации. При использовании JQuery (по умолчанию в Grails 2.0) переменная должна быть 'data', а не 'e', ​​и она будет содержать ваш объект JSON, который вы вернули с вашего контроллера, и нет необходимости оценивать или анализировать его, как в документации .

...