Having issues referencing $(this) from within a the nested ajax 'success' function... I know this is a scope issue, but can't seem to find a clean way to close the dialog on a successful update. Thanks for any help.
$("#dialog_support_option_form").dialog({
width: 400,
height: 180,
bgiframe: true,
autoOpen: false,
modal: true,
buttons: {
'Save Support Option': function(){
$.ajax({
type: 'POST',
url: "support_options/create_support_option.php",
data: $(this).find('form').serialize(),
success: function(data){
$("#list_support_options").html(data);
$(this).dialog('close');
}
});
},
'Cancel': function(){
$(this).dialog('close');
}
},
close: function(){
$(this).find('input').val('');
}
});
You should use the ajax option context: $(this),
to set the scope for the callbacks to the selected element.
You need to have a copy of that variable, like this:
var dlg = $(this);
$.ajax({
type: 'POST',
url: "support_options/create_support_option.php",
data: $(this).find('form').serialize(),
success: function(data){
$("#list_support_options").html(data);
dlg.dialog('close');
}
});
Since this
is in a different context on return, you need to capture it and pass it into the closure :)
Try it with $.proxy()
success: $.proxy(function(data){
$(this).dialog('close');
}, this);
You can 'pass' the scope from 'above' to a function with it
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