函数上的JQuery回调
我有以下行动:函数上的JQuery回调,jquery,Jquery,我有以下行动: $('.sub_outworker').live('click', function() { var input = $(this); var current_div = input.parents('div.report'); var current_div_id = current_div.attr('id'); var replace_di
$('.sub_outworker').live('click', function() {
var input = $(this);
var current_div = input.parents('div.report');
var current_div_id = current_div.attr('id');
var replace_div = current_div.children('div').first();
var submission = submit_form(input, replace_div);
var i = 0;
}
submit_form()函数如下所示:
function submit_form(input, replace_div) {
var form = input.parents('form');
loading_gif(replace_div);
$.ajax({
type: 'POST',
url: form.attr('action'),
data: 'ajax=true&' + form.serialize(),
success: function(data) {
get_json();
if(data == 'success') {
return 'success';
}
else {
return 'failed';
}
}
});
}
我想检查submission==是否失败,以及它是否再次运行submit_表单(即,给函数第二次工作机会-主要是因为它偶尔会由于令牌不匹配而导致验证失败)。但我不知道该怎么做 必须在
$.ajax()
回调中完成
$('.sub_outworker').live('click', function() {
var input = $(this);
var current_div = input.parents('div.report');
var current_div_id = current_div.attr('id');
var replace_div = current_div.children('div').first();
submit_form(input, replace_div);
}
function submit_form(input, replace_div) {
var form = input.parents('form');
loading_gif(replace_div);
$.ajax({
type: 'POST',
url: form.attr('action'),
data: 'ajax=true&' + form.serialize(),
success: function(data) {
get_json();
if(data == 'success') {
submit_form.failCount = 0;
}
else if (!submit_form.failCount) {
submit_form.failCount++;
submit_form(input, replace_div);
}
}
});
}
它必须在
$.ajax()
回调中完成
$('.sub_outworker').live('click', function() {
var input = $(this);
var current_div = input.parents('div.report');
var current_div_id = current_div.attr('id');
var replace_div = current_div.children('div').first();
submit_form(input, replace_div);
}
function submit_form(input, replace_div) {
var form = input.parents('form');
loading_gif(replace_div);
$.ajax({
type: 'POST',
url: form.attr('action'),
data: 'ajax=true&' + form.serialize(),
success: function(data) {
get_json();
if(data == 'success') {
submit_form.failCount = 0;
}
else if (!submit_form.failCount) {
submit_form.failCount++;
submit_form(input, replace_div);
}
}
});
}
如果您只想再运行一次,最简单(也是最干净)的方法可能是使用: 然后你可以做:
var request = submit_form(input, replace_div);
request.fail(function() {
submit_form(input, replace_div);
}).done(function() {
// request was successful, do something
});
延迟对象为异步调用提供了极大的灵活性,并允许您轻松地解耦代码。当然,如果您想将重复尝试进行Ajax调用视为
提交表单
函数的“功能”,或者如果您想重复多次,那么似乎是更好的方法。如果您只想再次运行它,最简单(也是最干净)的方法可能是使用:
然后你可以做:
var request = submit_form(input, replace_div);
request.fail(function() {
submit_form(input, replace_div);
}).done(function() {
// request was successful, do something
});
延迟对象为异步调用提供了极大的灵活性,并允许您轻松地解耦代码。当然,如果您想将重复尝试进行Ajax调用视为
提交表单
函数的“功能”,或者如果您想重复多次,那么似乎是更好的方法。您可以这样做吗?请注意,我不能100%确定您希望从服务器获得什么,或者您的页面的结构如何
function submit_form_ajax(serializedData, numAttempts) {
numAttempts--;
$.ajax({
type: 'POST',
url: form.attr('action'),
data: 'ajax=true&' + serializedData,
success: function(data) {
get_json();
if(data !== 'success') {
if( numAttempts >= 1 ) {
submit_form_ajax(serializedData, numAttempts-1);
}
}
}
});
}
function submit_form(input, replace_div) {
var form = input.parents('form');
loading_gif(replace_div);
submit_form_ajax(form.serialize(), 2);
}
你能这样做吗?请注意,我不能100%确定您希望从服务器获得什么,或者您的页面的结构如何
function submit_form_ajax(serializedData, numAttempts) {
numAttempts--;
$.ajax({
type: 'POST',
url: form.attr('action'),
data: 'ajax=true&' + serializedData,
success: function(data) {
get_json();
if(data !== 'success') {
if( numAttempts >= 1 ) {
submit_form_ajax(serializedData, numAttempts-1);
}
}
}
});
}
function submit_form(input, replace_div) {
var form = input.parents('form');
loading_gif(replace_div);
submit_form_ajax(form.serialize(), 2);
}
您无法从
success
回调中返回任何值。submit\u form
不会返回任何值。这可能解释了为什么我无法更早地尝试工作!一旦成功回调完成,是否可以返回某些内容,或者执行任何后续操作也需要放置在回调中?@MΓΓ:嗯,即使延迟对象也只接受回调。因此,如果你处理异步代码,你可以说一切都必须通过回调来处理。你不能从成功
回调返回任何值。提交表单
不会返回任何值。这可能解释了为什么我不能更早地尝试工作!一旦成功回调完成,是否可以返回某些内容,或者执行任何后续操作也需要放置在回调中?@MΓΓ:嗯,即使延迟对象也只接受回调。因此,如果你处理异步代码,你可以说所有的事情都必须通过回调来处理。利用延迟对象变得更加灵活也很有趣,但这是一个简单的解决方案+1:)看起来我们发布了类似的答案。我能看到的唯一区别是,我稍微进行了重组,以避免重新序列化表单上的数据…@bland:Ooook,有这么多支持;)我最初的解决方案建议使用由$.ajax
返回的延迟对象,但只有在请求本身失败的情况下才会失败,而不是当您只是得到与成功
不同的值时。不过,您仍然可以使用自己的延迟对象。查看我的更新答案。@MΓΓББLL是一个近在咫尺的东西,使用了Felix递延对象suggestion@bland_dan不用担心,我同意他的解决方案对于一次性重试来说更干净。利用延迟对象变得更灵活也很有趣,但这是一个简单的解决方案+1:)看起来我们发布了类似的答案。我能看到的唯一区别是,我稍微进行了重组,以避免重新序列化表单上的数据…@bland:Ooook,有这么多支持;)我最初的解决方案建议使用由$.ajax
返回的延迟对象,但只有在请求本身失败的情况下才会失败,而不是当您只是得到与成功
不同的值时。不过,您仍然可以使用自己的延迟对象。查看我的更新答案。@MΓΓББLL是一个近在咫尺的东西,使用了Felix递延对象suggestion@bland_dan不用担心,我同意他的解决方案对于一次性重试来说更干净。