先日の質問に続いて、私はもう 1 つの問題に遭遇しましたが、今では頭をぶつけるのに何時間も費やしました。
ほとんどの場合、SUCCESS フォームを送信するのに問題があります。私もこれを試しました:
半機能フィドルのコードは次のとおりです。
基本的に何が起こるかは次のとおりです。
- (クリックではなく) onSubmit を介してメソッドをフォームの送信にバインドします。
- 送信時に、jQuery .ajax() 呼び出しを介してリモート サーバーを呼び出します。
- 応答が「PENDING」の場合は、1 秒ごとに 9 回再試行します
- 失敗した場合、フォームを送信しないでください
- 成功したら、フォームを送信します
何を試しても、ループに入ることなく必要なときにフォームを送信したり、リモートサーバーを試行しているときにすぐに送信したりできません。
~フラストレーションのない試行錯誤の100の失敗はあなたのもの...
フィドルが嫌いな場合の直接のコードは次のとおりです。
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 で .submit() を使用すると、AJAX が再度呼び出され、プロセスが最初からやり直されます。私が欲しいのは、フォームのアクションが成功した場合にのみ発生することです。