2017-05-22 12 views
-1

同期の AJAXリクエストをサーバーに送信するために、javascriptアプリケーションを作成したいと考えています。同期AJAXリクエスト

サーバはlocalhost上で動作しているため、悪影響はありません。

なぜ同期的ですか?

「return」ステートメントのためにスクリプトが完全に同期していることが重要です。

私の現在のコード:

function request(command) { 
var re = new XMLHttpRequest(); 
var object = ""; 
re.open("POST","http://localhost:5400", true); 
re.send(command); 
re.onreadystatechange = function() { 
    if (re.readyState == 4 && re.status == 200) { 
    object = re.responseText; 
    } 
} 
//That seems to be the problem 
while (object == "") {} 
return object 

}

私は

あなたが持っています(理由を理解していない)whileを使用することが最善の方法ではありませんし、そうでない働くことを知っています非同期リクエストを同期させるためのアイデアやより良い解決策?

私は

+1

起動onreadystatechangeに関数内で返された値を望んでいるものは何でも。 –

+0

JS Ajaxリクエストは使用していませんが、コールバックに戻ります。 jQueryの場合:https://stackoverflow.com/questions/133310/how-can-i-get-jquery-to-perform-a-sync-rather-than-asynchronous-ajax-re?rq=1 –

+4

私は非同期に動作させる方法を習得したくないので、完全に同期することが重要であると感じています。 – JJJ

答えて

0

私が原因@Douglas_Tyler_Gordonと@Stephen_Sからのコメントに私のために受け入れ可能な解決策を見つけた:

function shell(command,callback) { 
var re = new XMLHttpRequest(); 
re.open("POST","http://localhost:5400", true); 
re.send(command); 
re.onreadystatechange = function() {callback(re);} 
} 
0

は、要求の同期を行うfalsere.openの三番目の引数を変更することを行うためにはjQueryを使用したくありません。同様に:

re.open("POST","http://localhost:5400", false); 

詳細はhttps://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Synchronous_and_Asynchronous_Requestsを参照してください。これを行う場合、whileループは必要ありません。

しかし、これは良いことではありません。非同期性はJavaScriptの基礎です。別のリソースにアクセスすると、Webページが単にフリーズしないようにします。

+0

私はそれを知っていますが、同期AJAXリクエストは非難され、私のFirefoxのバージョンでは動作しません –

+2

それでは、正しいことをして、非同期にする必要があります。おそらく、この機能が推奨されなくなった理由を考えてみてください。 –

+0

私は非同期リクエストを作成する方法を知っていますが、返すためにはAJAXレスポンスの戻り値が必要です –

関連する問題