2017-04-25 12 views
-1

私は、非同期XMLHTTPRequestの性質上、javascriptでresponseText値を返すことは不可能であることを知っています。私はreponseTextを関数に提供するIDに貼り付ける回避策関数を呼び出すことで、この問題の回避策を見つけることができました。しかし、今私はJSONファイルを取得してその値を返す必要があるので、この問題を再び遭遇しました。私はresponseTextを与えられた変数に注入しようとしましたが、うまくいきませんでした。また、私のためにそれを行う "インターフェースのような"ファイルを追加しようとしましたが、上記のどれもうまくいきませんでした。問題の回避策がありますか?native javascript return http.responseText

function httpGetJson(file, type) { 
     self.httpState(true); 
     try{ 
      var type = type || true; 
      var http = self.http(); 
      http.onreadystatechange = function() { 
       if (this.readyState == 4 && this.status == 200){ 
        returnJson(this.responseText); 
       } 
      } 
      http.open("GET", "json/" + file, type); 
      http.send(); 
     }catch (err){ 
      return log.error("http.httpGetJson", err.message); 
     } 
     self.httpState(false); 
    } 

あなたは、コールバック、または約束を追加する必要がありますcodepen http://codepen.io/mecostav/pen/JNdovR

答えて

0

上のすべての参照してください。たとえば、あなたの関数は、関数

function httpGetJson(file, type, cb) { 
    self.httpState(true); 
    try{ 
     var type = type || true; 
     var http = self.http(); 
     http.onreadystatechange = function() { 
      if (this.readyState == 4 && this.status == 200){ 
       cb(this.responseText); 
      } 
     } 
     http.open("GET", "json/" + file, type); 
     http.send(); 
    }catch (err){ 
     return log.error("http.httpGetJson", err.message); 
    } 
    self.httpState(false); 
} 

を受信すると、あなたはそれを呼び出すことができます。

httpGetJson('foo', 'bar', function (result) { 
    // do something with result 
}); 

の代わりに:

var result = httpGetJson('foo', 'bar'); 
// do something with result 

後者は単にJS、ドン」で動作しません。それを克服しようとはしません。 本当にそれが必要な場合は、シンクhttpリクエストを実行するための廃止予定のメソッドがあります。あなたはそれをグーグルでもできますが、しないでください。

+0

私は同期要求を認識しており、UXが大幅に悪化するため、これらを避けようとしています。 –

関連する問題