$('form#register').on('submit', function(e) {
e.preventDefault();
userAuth(this);
// if done : do a
// if fail : do b
});
$('form#login').on('submit', function(e) {
e.preventDefault();
userAuth(this);
// if done : do x
// if fail : do y
});
function userAuth(form) {
console.log( $(form).serialize() );
var request = $.ajax({
url: 'process.php',
cache: false,
type: 'POST',
data: $(form).serialize()
});
request.done( function (msg) {
console.log(msg);
});
request.fail(function(jqXHR, textStatus) {
console.log(jqXHR, textStatus);
});
}
如何在提交处理程序中检查完成/失败?
是的,我知道这需要基本了解callback
和asynchronous
执行javascript。我已经阅读了不少书和教程,但我似乎没有得到它。所以这里的一个例子可能有所帮助。
答案 0 :(得分:2)
添加回调参数的最简单方法:
function userAuth(form, doneCallback, failCallback) {
console.log( $(form).serialize() );
var request = $.ajax({
url: 'process.php',
cache: false,
type: 'POST',
data: $(form).serialize()
});
request.done(doneCallback);
request.fail(failCallback);
}
并将其命名为:
$('form#register').on('submit', function(e) {
e.preventDefault();
userAuth(this, function(){
//I'm done
}, function(){
//I failed
});
});
请记住,回调函数将从jQuery接收与done
和fail
相同的参数。如果您不想这样,请将其称为:
request.done( function (msg) {
doneCallback();
});
request.fail(function(jqXHR, textStatus) {
failCallback();
});
回调不是一个困难的概念。请记住,它们是诸如整数,字符串,RegExps等参数。它们恰好是一个功能,所以它们是可以调用的。
编辑以回答评论
您可以通过多种方式保存函数中的值:
var globalVariable;
userAuth(this, function() {
var myValue = 4; // local variable
globalVariable = myValue;
window.explicitGlobalVariable = myValue; // same as above, except I haven't created a variable beforehand
implicitGlobalVariable = myValue; // I'm omitting var keyword, so it will leak to global scope
})
这样做的缺点是在大多数情况下使用全局变量是代码味道。有一些方法可以避免它们,但是需要更多的知识才能提供一个好的例子。