私の質問が主観的/客観的であるかどうかはわかりませんが、JavaScriptの初心者として、この問題にかなり遭遇しています。だからここに行きます。
私はC#の記述に慣れているので、JavaScriptの構造はC#のように見えます。そしてそれだけで、私が思う問題が発生します;-)今日再び私の問題に遭遇した簡単な例を挙げましょう:
MyLibrary.fn.InitAddEntityForm = function () {
$('a#btnAddEntity').click(function () {
//post data and receive object with guid and isPersisted boolean
var persistedObject = MyLibrary.fn.CheckAndSendAddEntityForm("name", "avatarurl.png");
console.log("test");
//check if persisted and go to next step
if (persistedObject.isPersisted) {
MyLibrary.fn.InitAddAnotherEntityForm(persistedObject.gdEntityId);
} else {
alert("Oops, something went wrong. Please call 911");
}
});
};
//////*****/////
//SOME FUNCTION THAT SENDS MY FORM AND RETURNS AN OBJECT WITH TRUE VALUE AND POSTED ENTITY ID
/////*****//////
MyLibrary.fn.CheckAndSendAddForm = function (txtName, ImageUrl) {
var postUrl = "/admin/add";
var persistedObject = new Object();
$.post(
postUrl,
{ Name: txtName, ImageUrl: txtImageUrl},
function (data) {
if (data.Status == 200) {
console.log("Post status:" + data.Message);
persistedObject.isPersisted = true;
persistedObject.gdEntityId = data.Data;
} else if (data.Status == 500) {
console.log("Failed to post entitiy");
} else {
console.log("Fault with Javascript");
}
}, "json"
);
return persistedObject;
};
さて、それだけです。すべてが大丈夫に見えますか?ブラウザはノーと言います。私はfirebugを使用してデバッグを試み、コードを1行ずつループしました。そのようにして、ブラウザーは必要な処理を実行します。新しい関数を実行して、ウィザードに次のパネルを表示します。
コードに多くのConsole.logs()を配置した後、これはJavaScriptのタイミングに関するものである必要があることがわかりました。C#では、コードは1行ずつ実行されますが、JavaScriptは実行されないようです。そのConsole.log( "test")を配置することにより、「Post status:Success!」の前に「test」がコンソールに表示されることに気付きました。
だからここに私の質問があります、ブラウザが私のコードを実行する方法を制御できるように、JavaScriptコードをどのように書くべきですか?以下のコードをCheckAndSendAddEntityForm()の最後に本当に置き換える必要がありますか?
//check if persisted and go to next step
if (persistedObject.isPersisted) {
MyLibrary.fn.InitAddAnotherEntityForm(persistedObject.gdEntityId);
} else {
alert("fout");
}
これは私がJavaScriptを書かなければならない方法ですか:1つの大きなドミノ効果ですか、それとも私は何か間違ったことをしているだけですか?