Velocity - Wie Sie vermeiden, ParseErrorException bei der Verwendung von jQuery?
Ich versuche, fügen Sie ein jQuery-post an einige JavaScript-Code auf einer web-Seite. Die gesamte Seite ist mit mehreren Velocity-templates. Alles wurde gut, bis ich habe versucht, fügen Sie die jQuery-post, jetzt bekomme ich:
org.apache.velocity.exception.ParseErrorException: Encountered "," at line 282, column 24 of /WEB-INF/velocity/www/comments.vm
Was expecting one of:
"(" ...
<RPAREN> ...
<ESCAPE_DIRECTIVE> ...
~~~snip~~~
Linie 282 ist $.post(...
und Spalte 24 erscheint und der erste sein "," Zeichen. Zunächst hatte ich die JSON-auf dieser Linie, aber ich zog es nach oben (zu den var myJSONObject ...
Linie), da ich dachte der Fehler über ungültige JSON (tabs am Anfang der Zeile gab, die eine irreführende Spalte Anzahl).
var myJSONObject = {"body": "", "action": "postcomment", "submitted": "true", "ajax": "true"};
myJSONObject.body = $("body").val();
$.post("$!{articleurl}", myJSONObject, function(result){
btn.textContent='Comment sent successfully.';
});
Kleines Update
Änderte ich die folgenden Zeilen:
var url = "$articleurl";
$.post(url, myJSONObject, function(result){
~~~snip~~~
Die parse-exception-noch immer konzentriert sich auf die ersten ",". Ich nehme an, das Problem ist, dass die Geschwindigkeit denkt, es sollte in der Lage sein zu beheben $.post - wenn in der Tat, es ist jQuery. Ich habe jQuery in anderen Velocity-VM-Vorlagen ohne problem. Gibt es einen Weg, um Geschwindigkeit zu ignorieren bestimmte Zeilen /Aussagen beim Parsen?
Update 2
Fand ich dieser link über die Flucht Referenzen in der Geschwindigkeit, aber es löst nicht mein Problem. Hinzufügen eines "\" vor $.post
gibt mir genau die gleiche Fehlermeldung, aber die Spalte ist ein extra, weil der Charakter am Anfang der Zeile.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie wickeln Sie Ihre javascript mit
#[[ ... ]]#
erzählt, die Geschwindigkeit nicht analysieren der beiliegenden block (neu in Velocity 1.7)jQuery
statt$
Ok, es scheint zwei Lösungen für dieses:
Erste, mit jQuery können wir nur vermeiden, mit den globalen alias $ und stattdessen das jQuery-Objekt direkt:
In meinem Fall, der oben funktioniert Super. Aber ich vermute, in anderen Szenarien (nicht jQuery) kann dies nicht möglich sein. In dem Fall können wir "verstecken" unsere Zeichen in einem gültigen Velocity-Referenz, wie diese:
Quelle: http://velocity.apache.org/engine/devel/user-guide.html#escapinginvalidvtlreferences
Ich würde immer noch gerne wissen, warum Sie die backslash-escape-hat nicht funktioniert, aber die oben erhalten zumindest mich wieder bewegen. 🙂
Ich denke, das ist eine bug in der version 1.6.x, weil es funktioniert in 1.7(Wenn nicht, bitte sagen Sie mir, ich test es viele Male..), nach der Referenz, die
$
nur wirksam, wenn es ist, gefolgt vona-zA-Z
. Ich will versuchen zu tun debug das, was wirklich passiert ist, aber die übersetzung von code generiert wird, indem Java CC tool, es ist zu schwer zu erkennen, die Logik...müssen Sie erstellen eine js-Datei mit dem javascript-code
und importieren Sie Ihre js-Datei in der vm-code
Ich konnte es nicht zu der Arbeit mit den anderen Updates wie die Flucht "$" in der Geschwindigkeit leider. Ich habe es funktioniert durch das laden einer externen js-Datei mit dem jQuery anstelle des Schreibens von jQuery direkt in der Geschwindigkeit. Klappte bei mir zumindest, hoffe es hilft jemanden 🙂
/björn