2012-03-29 3 views
0

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

Вот мой Javascript и вид .gsp:

<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 documentation , Однако это не сработает. На консоли браузера, я получаю:

Uncaught ReferenceError: e is not defined 

из моего g:remoteForm.

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

+0

Это опечатка в коде или вопросе? ! = dbrin

+0

Извините, я отредактировал сообщение, чтобы исправить его. Это не было в исходном коде. –

ответ

1

Это, кажется, работает:

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

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

+0

http://grails.org/doc/2.2.0/ref/Tags/formRemote.html содержит документацию о событиях –

1

Я угадываю здесь, но это выглядит ошибкой в ​​документации. Я бы ожидать, что эта часть:

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

Большое спасибо за помощь. Я изменил функции как таковые: 'onSuccess =" updateVideoLoad (data, textStatus) "и' function updateVideoLoad (data, textStatus) {...} '. Теперь я получаю 'Uncaught TypeError: Не могу прочитать свойство 'urlAccepted' из неопределенных (" data ")'. Итак, я продвинулся вперед, поскольку кажется, что я фактически вызываю функцию javascript, но все еще не могу разобрать JSON Map. –

0

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

0

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

Если вы используете додзё, вам следует использовать имя переменной «ответ»:

onComplete="updateVideoLoad(response)" 

Он отлично работает для додзё.

Смежные вопросы