2016-06-16 9 views
0

私はJavaScriptを使ってXMLHttpRequestを使って、ローカルサーバにHTTPリクエストを行います。これは私が使用しているコードです。JavaScriptのHTTPレスポンスを返す

var xhr = new XMLHttpRequest(); 
xhr.open("POST", "//localhost:5000/translate", true); 
xhr.setRequestHeader("Access-Control-Allow-Origin", "*"); 
xhr.setRequestHeader("Content-Type", "application/json; charset=UTF-8"); 
xhr.send(JSON.stringify({"sentence":str})); 


xhr.onreadystatechange = processRequest; 

function processRequest(e) 
{ 
    if (xhr.readyState == 4) 
    { 
    console.log('trans_res set'); 
    trans_res = xhr.responseText; // here trans_res is a global variable 
    return String(xhr.responseText); 
    } 
} 

私はこの関数がresponseTextを返すようにして、他にどこでも使用できるようにします。私は二つの方法、 1を試してみましたそのために

)ほとんどが、私はそれが理由の前だと思う、私は応答を返すと、コンソールに

var temp = function(string) 
console.log(temp) 

を応答を印刷しようとしたが、temp変数はコンソールで未定義として来ていますそれはそれはまだ設定されていないCONSOLE.LOGに来る

2)私はグローバル変数(trans_resを置く(応答がない返さ))と機能でそれを設定し、印刷すること

var temp = function(string) 
console.log(trans_res) 

しかし、これも未定義となっています。

私は応答を返すようにするにはどうすればよいですか?実行を中断する必要がある場合は問題ありませんが、有効な応答が必要です。

答えて

0

新しいドライバーが必要です。郵便受け(trans_res)をどこに送るのかをアマゾンに依頼します。 Amazonはあなたに非同期で働いています。後であなたの郵便箱の中で見たら、ドライバーは見つからないでしょう。 1時間後にも。 「ポストボックス」の問題は、見る時間がわからないことです。

あなたはreadyStateのは4

+0

あなたは応答を受け取るまで実行が停止するようにいくつかの方法を提案することができます。 – user40647

+0

これは問題です.Javascriptを停止すると、ブラウザ全体(タブ)が停止します。マルチスレッド化はありません。 'timer = window.setInterval(testMyResult、250)'と 'function testMyResult()'を実行できます。あなたの「ポストボックス」を1秒間に4回ポーリングします。結果が到着したら、 'window.clearInterval(timer)'する必要があります。 – Holger

0

を取得したときに、私は@Holgerによって答えはやや正解だと思い、(通知、変更、表示)の仕事をするためにしなければなりません。あなたは関数によって実際に生成される前に戻り値をチェックしています。時には値を生成するのに時間がかかる長いプロセスがあります。関数を高速化することに焦点を当てるか、返された値をチェックし続ける必要があります。

if-elseステートメントを使用して値を確認してください。定義されていない場合は、ログに記録します。 UXに関連している場合は、ローディングホイールアニメーションをユーザー側で使用できます。

関連する問題