2012-03-29 11 views
0

Ich weiß, das ist ein wiederkehrendes/klassisches Thema, aber ich habe nichts gefunden, das mir bisher geholfen hat. Ich versuche eine Karte von meinem Controller zu rendern. Dies resultiert aus einer Ajax-Anfrage und soll von einer Javascript-Funktion 'onSuccess' "aufgefressen" werden.Grails - render Karte vom Controller über Ajax mit JSON

Hier ist meine Javascript und .gsp Ansicht:

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

Hier sind meine Controller:

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 
    } 

Es mir genau so, wie die in den Grails documentation vorgesehenen Beispiel sieht . Es funktioniert jedoch nicht. Auf der Browser-Konsole, die ich erhalten:

Uncaught ReferenceError: e is not defined 

von meinem g:remoteForm.

Jeder Vorschlag ist sehr willkommen. Vielen Dank für Ihre Hilfe.

+0

ist dies ein Tippfehler in Code oder Frage? ! = dbrin

+0

Entschuldigung, ich habe den Post bearbeitet, um ihn zu korrigieren. Dies war nicht im ursprünglichen Code. –

Antwort

1

Dies scheint zu funktionieren:

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

Gibt es einen Ort, wo Dokumentation auf diesen JavaScript-Ereignisse zu erhalten (onComplete, onSuccess, ...)?

+0

http://grails.org/doc/2.2.0/ref/Tags/formRemote.html enthält Ereignisdokumentation –

1

Ich rate hier, aber es sieht aus wie ein Fehler in der Dokumentation. Ich würde erwarten, dass dieser Teil:

onSuccess="updateVideoLoad(e)" 
          ^^^ 

wirklich sein sollten:

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

an den generierten Code der Suche (unter Grails 2.0), das sind die Variablen in der zurück verwendet werden:

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

Sehen Sie sich die success-Eigenschaft im generierten Code an.

+0

Vielen Dank für Ihre Hilfe. Ich habe die Funktionen so geändert: 'onSuccess =" updateVideoLoad (data, textStatus) "' und 'function updateVideoLoad (data, textStatus) {...}'. Jetzt bekomme ich 'Uncaught TypeError: Kann Eigenschaft" urlAccepted "von undefined (" Daten ")' nicht lesen. Also ging ich vorwärts, da es scheint, dass ich jetzt die JavaScript-Funktion aufruft, aber immer noch nicht in der Lage bin, die JSON-Karte zu analysieren. –

0

Dies scheint ein Dokumentationsfehler zu sein. Bei Verwendung von JQuery (der Standard ab Grails 2.0) Die Variable sollte "Daten" und nicht "e" sein und enthält Ihr JSON-Objekt, das Sie von Ihrem Controller zurückgegeben haben, und muss nicht wie in den Dokumenten ausgewertet oder analysiert werden .

0

Ich hatte das gleiche Problem, aber ich benutze Dojo.

Wenn Sie Dojo verwenden, shoud Sie den Variablennamen 'Antwort' verwenden:

onComplete="updateVideoLoad(response)" 

Es funktioniert für Dojo in Ordnung.

Verwandte Themen