I've got a model creation form in rails which I also have returning JSON through ajax. My code so far look like:
$('#new_stem').ajaxForm({ //#new_stem is my form
dataType: 'json',
success: formSuccess
});
function formSuccess(stemObj) {
//does stuff with stemObj
}
And I have a multipart form with a file uploader (but I'm not sure if that is relevant).
When I submit the form it works fine (my models are properly being created and renders as json), but instead of the json getting handled by the formSuccess function, it prompts a download for "stems.json" (the path to my stem creation action) in Firefox.
What would cause this to happen, and what could solve it? Not sure if this is part of the problem, but I don't have a submit button in my form, I have a link with a click handler that calls $('#new_stem).submit()
Thanks guys!
EDIT: Firebug tells me the header contains the following:
Etag "b53e5247e7719cf6b1840e2c6e68781c"
Connection Keep-Alive
Content-Type application/json; charset=utf-8
Date Mon, 03 May 2010 02:19:31 GMT
Server WEBrick/1.3.1 (Ruby/1.8.7/2010-01-10)
X-Runtime 241570
Content-Length 265
Cache-Control private, max-age=0, must-revalidate
plus a cookie header
To prevent browser to trigger download of .json file set Content-type header to "text/html".
PHP:
header("Content-type: text/html");
ASP.NET MVC:
return Json(obj, "text/html");
In javascript you need to parse text result, like this:
$(".addform").ajaxSubmit({
url: "file.php",
type: "POST",
dataType: "text",
iframe: true,
success: function (text) {
var data = $.parseJSON(text);
},
error: function (xmlRequest, textStatus, errorThrown) {
alert(errorThrown);
}
});
Works perfectly.