使用回调
Working with callbacks
$('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);
});
}
如何检查提交处理程序中的 done/fail?
是的,我知道这需要对 callback
和 asynchronous
执行 javascript 有基本的了解。我已经阅读了很多书籍和教程,但我似乎不明白。所以也许这里的一个例子会有所帮助。
最简单的回调参数添加方式:
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();
});
回调不是一个很难的概念。请记住,它们是 ints、strings、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
})
这样做的缺点是在大多数情况下使用全局变量是一种代码味道。有一些方法可以避免它们,但是需要更多的知识才能给出一个好的例子。
$('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);
});
}
如何检查提交处理程序中的 done/fail?
是的,我知道这需要对 callback
和 asynchronous
执行 javascript 有基本的了解。我已经阅读了很多书籍和教程,但我似乎不明白。所以也许这里的一个例子会有所帮助。
最简单的回调参数添加方式:
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();
});
回调不是一个很难的概念。请记住,它们是 ints、strings、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
})
这样做的缺点是在大多数情况下使用全局变量是一种代码味道。有一些方法可以避免它们,但是需要更多的知识才能给出一个好的例子。