繼續我的問題,從另一天開始,我遇到了另一件事情,現在我已經花了太多時間敲打我的頭。表單提交與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