恐惧,
这是我修改后的 jquery ajaxform 插件实现:
(function($) {
$.fn.ajaxify = function(options) {
// Defaults and options
var defaults = {
method: '',
action: '',
dataType: null, // i.e. json, jsonp etc
target: null, // target div for ajax return data
errordiv: null,
// callback functions
onBeforeSend: function() { },
onSubmit: function() { return true },
onSuccess: function() { },
onError: function() { }
};
var opts = $.extend({}, defaults, options);
this.each(function() {
$(this).bind('submit', function(event) {
event.preventDefault();
// Increase readability && scope
FORM = $(this);
// Mimic the normal onSubmit handler
if (!opts.onSubmit.call(FORM[0])) { return; }
// Determine the method && action
var method = opts.method || FORM.attr('method') || 'GET';
var action = opts.action || FORM.attr('action');
var dataType = opts.dataType || "text";
var target = opts.target || null;
var errordiv = opts.errordiv || null;
// Submit the form via ajax, with appropriate callback
$.ajax({
type: method,
url: action,
data: FORM.serialize(),
dataType: dataType,
beforeSend: function() {
opts.onBeforeSend(FORM[0]);
},
success: function(data) {
if (target != null)
opts.onSuccess.call(FORM[0], data, target);
else
opts.onSuccess.call(FORM[0], data);
},
error: function(request, status, error) {
// Boil the ASP.NET AJAX error down to JSON.
//var err = eval("(" + request.responseText + ")");
// Display the specific error raised by the server
if (request.responseText == '') {
var loader = this;
setTimeout(function() { $.ajax(loader); }, 150);
//console.log(status + " : " + request.statusText + " : " + request.status);
}
else {
if (errordiv != null)
opts.onError.call(FORM[0], request.responseText, errordiv);
else
opts.onError.call(FORM[0], request.responseText);
}
}
});
});
});
// allow chaining
return this;
}
})(jQuery);
用法(在哪里<form id="ajaxify" method="post" action="<%=Url.Action("Test") %>">
等..:
$(document).ready(function() {
var options = {
onSubmit: myOnSubmit,
onBeforeSend: myBefore,
onSuccess: myOnSuccess,
onError: myOnError,
target: "#myDiv",
errordiv: "#errDiv"
};
$('#ajaxify').ajaxify(options);
});
function myOnSubmit() {
var valid = true;
var FORM = $(this);
FORM.find('input').css('border-color', '#F0F0F0');
// fake validation just to demonstrate
FORM.find('input').each(function() {
if ($(this).val() == '') {
$(this).css('border-color', 'red');
valid = false;
}
});
return valid;
}
function myBefore() {
alert("we");
}
function myOnSuccess(msg, target) {
if (target == null) {
// this could also be a manually entered target
// i.e. $("#myTargetDiv").html(msg);
alert("no target");
}
else
//alert($(target).html());
$(target).html(msg);
}
function myOnError(errorText, errorDiv) {
$(errorDiv).html(errorText);
}
希望这应该让人深思……