diff --git a/CHANGELOG.txt b/CHANGELOG.txt index d21f5b0..2a847f2 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -4,6 +4,7 @@ X-editable changelog Version 1.2.0 wip ---------------------------- +[enh #36] 'submit' method: added 'ajaxOptions' property to modify ajax request (vitalets) [enh] editableContainer removed from docs as not widely used (vitalets) [enh] editableContainer: removed 'autohide' option and 'cancel' event. Use 'hidden' event instead (vitalets) [enh] 'hidden' event: added param 'reason' that points to reason caused hiding (vitalets) diff --git a/src/element/editable-element.js b/src/element/editable-element.js index 08dda47..70c3870 100644 --- a/src/element/editable-element.js +++ b/src/element/editable-element.js @@ -429,6 +429,7 @@ Makes editable any HTML element on the page. Applied as jQuery method. @param {object} options @param {object} options.url url to submit data @param {object} options.data additional data to submit + @param {object} options.ajaxOptions additional ajax options @param {function} options.error(obj) error handler (called on both client-side and server-side validation errors) @param {function} options.success(obj) success handler @returns {Object} jQuery object @@ -439,21 +440,20 @@ Makes editable any HTML element on the page. Applied as jQuery method. errors = this.editable('validate'), values; - if(typeof config.error !== 'function') { - config.error = function() {}; - } - if($.isEmptyObject(errors)) { values = this.editable('getValue'); if(config.data) { $.extend(values, config.data); - } - $.ajax({ - type: 'POST', + } + + $.ajax($.extend({ url: config.url, data: values, + type: 'POST', dataType: 'json' - }).success(function(response) { + }, config.ajaxOptions)) + .success(function(response) { + //successful response if(typeof response === 'object' && response.id) { $elems.editable('option', 'pk', response.id); $elems.removeClass('editable-unsaved'); @@ -461,13 +461,20 @@ Makes editable any HTML element on the page. Applied as jQuery method. config.success.apply($elems, arguments); } } else { //server-side validation error + if(typeof config.error === 'function') { + config.error.apply($elems, arguments); + } + } + }) + .error(function(){ //ajax error + if(typeof config.error === 'function') { config.error.apply($elems, arguments); } - }).error(function(){ //ajax error - config.error.apply($elems, arguments); }); } else { //client-side validation error - config.error.call($elems, {errors: errors}); + if(typeof config.error === 'function') { + config.error.call($elems, {errors: errors}); + } } return this; } diff --git a/test/unit/api.js b/test/unit/api.js index 93f0cfb..ca7a1d9 100644 --- a/test/unit/api.js +++ b/test/unit/api.js @@ -213,7 +213,6 @@ $(function () { }); asyncTest("'submit' method: client and server validation", function () { - expect(6); var ev1 = 'ev1', ev2 = 'ev2', e1v = 'e1v', @@ -230,6 +229,7 @@ $(function () { equal(settings.data.text, ev2, 'first value ok'); equal(settings.data.text1, e1v, 'second value ok'); equal(settings.data.a, 123, 'custom data ok'); + equal(settings.type, 'PUT', 'ajaxOptions ok'); this.responseText = {errors: { text1: 'server-invalid' } @@ -256,11 +256,13 @@ $(function () { data: {a: 123}, error: function(data) { equal(data.errors.text1, 'server-invalid', 'server validation error ok'); - e.remove(); e1.remove(); start(); - } + }, + ajaxOptions: { + type: 'PUT' + } }); }); @@ -339,4 +341,4 @@ $(function () { equal(e.text(), groups[2], 'new text shown correctly'); }); -}); \ No newline at end of file +});