私は通常、スクリプトがいくつかのajaxや一般的なサーバーレスポンスに依存しているときに、このようなjavascriptでスクリプトを構築します。私は本当にそれが最も効率的なやり方だとは思わないので、これらの種類のスクリプトを実行するより良い方法は何でしょうか?効率的なajaxベースのjavascriptスクリプトの作成方法
function someclass() {
//some internal variables here
this.var1 = null;
this.var2 = null;
...
//some ajax function which gets some critical information for the other functions
this.getAJAX = function() {
self = this;
urls = "someurlhere";
//jquery ajax function
$.ajax({
type: "GET",
url: url,
dataType: 'json',
complete: function (xhr, textStatus) {
//get the response from the server
data = JSON.parse(xhr.responseText);
//call the function which will process the information
self.processAJAX(data);
}
})
this.processAJAX = function(data) {
//set some of the internal variables here
//according to the response from the server
//now that the internal variables are set,
//I can call some other functions which will
//use the data somehow
this.doSomething();
}
this.doSomething = function() {
//do something here
}
}
だから私は、このようなスクリプト何か使用します。
//instantiate the class
foo = new someClass();
//get the information from the server
//and the processAjax function will eventually
//call the doSomething function
foo.getAjax();
それは何が起こっているか、スクリプトを使用するには明確ではありませんので、だから私は本当にこれを好きではないが。そのため、doSomethingのが呼ばれたとき、通常はサーバーからの応答が非常にいくつかの時間がかかるため、必要な情報はまだありません
//instantiate the class
foo = new someClass();
//get info from the server
//in this example, the processAJAX function will not call the doSomething
foo.getAjax();
//do something
foo.doSomething();
しかしこれは動作しません:私はこのような何かをできるようにしたいと思います、関数はそれがすると思われることをしません。
この作品を作成するには?
答えは既にStackOverflowのどこかにあるとは思いますが、何も見つかりませんでしたので、回答またはStackOverflowでこれを説明できるリソースへのリンクのどちらにも感謝します。どんな助けもありがとうございます。ありがとうございました。
これは少しclunkyようです。それほど標準的な解決策はありませんか? – miki725
冗長性が低い: 'foo.getAjax(foo.doSomething);'これは "clunky"かもしれませんが、非同期プログラミングの性質です。基本的な問題は、AJAX呼び出しが返されるときには保証できないため、コールバックを提供するか、イベントリスナーのシステムを確立する必要があることです。コールバックはずっと簡単な解決策です。 – Andrew