I want to add more params to my OnSuccess call back (but keep the ajax context variable).
What I did is:
using (Ajax.BeginForm("Register", new AjaxOptions() {
OnSuccess = "new function(arg){HandleBasicForm(arg , 'MyCustomVariable')}",
...
The JS function:
function HandleBasicForm(ajaxContext , myCustomVariable){
var content = ajaxContext.get_response().get_object();
....
}
But ajaxContext
is null.
How do I do that?
Since you're using get_response()
I'm guessing that you're not using the unobtrusive javascript stuff (in MVC3 you've set HtmlHelper.UnobtrusiveJavaScriptEnabled = false
) and you're referencing the MicrosoftAjax,js and MicrosoftMvcAjax.js files. If that's the case you just need to drop the new
keyword.
using (Ajax.BeginForm("Register", new AjaxOptions() { OnSuccess = "function(arg){HandleBasicForm(arg , 'MyCustomVariable')}"})
If you are using the MVC3 unobtrusive javascript support with jquery.unobtrusive-ajax.js then you can use the implicitly available xhr
and data
variables instead.
using (Ajax.BeginForm("Register", new AjaxOptions() { OnSuccess = "HandleBasicForm(data, 'MyCustomVariable')"})
In your handler there would be no need to use get_response().get_object()
since the deserialized JSON data would be passed in to your handler directly.
function HandleBasicForm(data, myCustomVariable){
var someValue = data.someProperty; //work with data object returned
....
}
OnSuccess
receives data, status, xhr
from the server:
OnSuccess = "myJsMethod(data, status, xhr)"
And then its equivalent JavaScript method would be:
function myJsMethod(data, status, xhr) {
}
Now your controller should return:
return Json(new { param1 = 1, param2 = 2, ... }, JsonRequestBehavior.AllowGet);
Then in myJsMethod
you will have access to data.param1
and so on.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With