(function ($) { // 函数 var ajaxSubmit = function (selector, callback) { var $form = $(selector); if ($form.attr('ajax-disabled') != undefined) return true; var options = { url: $form.attr('action') || window.location.href, type: $form.attr('method') || 'POST', beforeSend: function () { $.showLoading(); }, success: function (result) { if(callback && typeof(callback) === "function") { callback(result); } }, complete: function() { $.hideLoading(); } ,error:function(result){ alert(JSON.stringify(result)); } }; if (!!$form.attr('enctype') && $form.attr('enctype').toLowerCase() === 'multipart/form-data') { var formData = new FormData(); var $files = $form.find('input[type="file"][name]'); $files.each(function() { if ('files' in this && this.files.length > 0) { // ToDo: Support Multiple on any input? // Just need a loop here.. formData.append(this.name, this.files[0]); } }); var $noFiles = $form.find(':not(input[type="file"])'); $.each($noFiles.serializeArray(), function(i, pair) { formData.append(pair.name, pair.value); }); options.data = formData; options.method = 'POST'; options.contentType = false; options.processData = false; } else { options.data = $form.serializeArray(); } $.ajax(options); }; $.extend($.fn, { ajaxSubmit: function (callback) { $(this).form() $(document).off('submit', this.selector).on('submit', this.selector, function (e) { e.preventDefault(); var $form = $(this); if ($form.attr('ajax-disabled') != undefined) return true; ajaxSubmit(this, callback); return false; }); } }) })(Zepto);