"render as JSON" is display JSON as text instead of returning it to AJAX call as expected
Posted
by
typoknig
on Stack Overflow
See other posts from Stack Overflow
or by typoknig
Published on 2012-10-15T22:14:47Z
Indexed on
2012/10/15
23:02 UTC
Read the original article
Hit count: 141
grails
I'm navigating to the index
action of MyController
. Some of the on the index page I'm making an AJAX call back to myAction
in MyController
. I expect myAction
action to return some data as JSON to my AJAX call so I can do something with the data client side, but instead of returning the data as JSON like I want, the data is being displayed as text.
Example of my Grails controller:
class MyController {
def index() {
render( view: "myView" )
}
def myAction {
def mapOfStuff = [ "foo": "foo", "bar":]
render mapOfStuff as JSON
}
}
Example of my JavaScript:
$( function() {
function callMyAction() {
$.ajax({
dataType: 'json',
url: base_url + '/myController/myAction',
success: function( data ) {
$(function() {
if( data.foo ) {
alert( data.foo );
}
if( data.bar ) {
alert( data.bar );
}
});
}
});
}
});
What I expect is that my page will render, then my JavaScript will be called, then two alerts will display. Instead the JSON array is displayed as text in my browser window:
{"foo":"foo","bar":"bar"}
At this point the last segment of the URL in my address bar is myAction
and not index
. Now if I manually enter the URL of the index page and press refresh, all works as expected.
I have half a dozen AJAX calls I do the exact same way and none of them are having problems. What is the deal here?
UPDATE:
I have noticed something. When I set a break point in the index
action of MyController
and another one in the myAction
action, the break point in myAction
gets hit BEFORE the break point in index
, even though I am navigating to the index
. This is obviously closer to the root cause of my problem, but why is it happening?
© Stack Overflow or respective owner