继续我的问题,从另一天开始,我遇到了另一件事情,现在我已经花了太多时间敲打我的头。表单提交与AJAX轮询呼叫
大部分情况下,我无法让SUCCESS表单提交。我想这也:
下面是一个半功能小提琴代码:
本质上发生的事情是这样的:
- 我绑定的方法通过onSubmit(而不是点击)向表单提交
- 提交时,它要求通过jQuery阿贾克斯()的远程服务器调用
- 如果回答是“待定”,重试每1秒,九次
- 如果失败,不提交表单
- 成功时,提交表单
无论我尝试什么,我都无法让表单在我想要的时候提交而不进入循环,或者在尝试远程服务器时不立即提交。
〜沮丧,试图-100-的东西 - 即失效-LY你...
下面的代码直接的情况下,你不喜欢小提琴:
var retries = 0;
var success = false;
var token = "toki wartooth is not a bumblebee";
$(document).ready(function() {
// Attach the action to the form
$('#tehForm').attr('onSubmit', 'onsubmit_action(event)');
});
function async(fn) {
setTimeout(fn, 1000);
}
function pollServer() {
$.ajax({
type: "POST",
cache: "false",
url: "/remoteCall",
dataType: "json",
data: {
ref_token: token
}
}).done(function(data, code, jqXHR) {
switch (data.status) {
case "SUCCESS":
alert("Success");
success = true;
// --> HERE IS WHERE I WANT THE FORM TO SUBMIT <--
break;
case "PENDING":
if (retries < 9) {
retries += 1;
async(function() {
pollServer();
});
} else {
alert("Failed after 9 tries");
}
break;
case "ERROR":
alert("Error");
break;
default:
alert("Some kind of horrible error occurred");
break;
}
}).fail(function(jqXHR, textStatus) {
var statusCode = jqXHR.status;
alert("Request failed: " + statusCode + " " + textStatus);
});
}
function onsubmit_action(event) {
pollServer();
if (success === false) {
// RETURN FALSE DIDN'T WORK, SO I FOUND THIS
event.preventDefault();
}
}
编辑:
再次,这里真正的问题是我停止提交表单。在SUCCESS上,我希望提交表格。目前,如果我在SUCCESS中使用.submit(),则会再次调用AJAX,启动该过程。我想要的只是表单的行动,只有在成功的情况下才能开火。
注意:我知道这是一个看似常见的问题,但我还没有遇到一个适合我的答案,这就是我问的原因。相信,我一直在阅读/尝试。 – Spanky 2012-08-16 23:19:56
我真的不明白你的代码试图做什么,从我可以收集尝试设置ajax上下文:$('#tehForm');那么你可以使用$(this)// ==上下文so $(this).submit() – Philip 2012-08-16 23:24:50
是否需要每隔1秒轮询一次服务器?如果没有,但你想要快速轮询,我建议调用一个函数,当你匹配PENDING的情况下,在完成的处理程序中执行另一个Ajax调用。我问的原因是每1秒是真的频繁,你肯定会从它疯狂的行为。将它绑定到完成的处理程序将保证您的浏览器可以像浏览器一样快速地触发调用(并且在大多数情况下,浏览器可以同时处理的最大4个Ajax调用似乎不是很有用)。 – brandwaffle 2012-08-16 23:25:43