• 締切済み

無名関数内の変数のreturn

httpObj.onreadystatechange = function() { if ((httpObj.readyState == 4) && (httpObj.status == 200)) { var data = httpObj.responseText.split(","); Ajaxで非同期通信をしています。 ステータスチェックをして、respinseTextを受け取るのですが、この変数dataをどうしてもreturnしたいのです。 このままだと、当然ローカル変数なのでreturnできません。 前に同じ質問をして、同期通信にすればよいのでは?とアドバイスをいただいたのですが、今回はどうしても非同期通信を行いたいのです。 変数varをそのまま別の関数の引数にする、という方法では解決できずに困っております。 何かよい方法があれば、アドバイスをお願いします。

みんなの回答

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

基本的に考えれば、ココで呼び出されている無名関数は、イベントで呼び出されているので、たとえreturn したとしても、その返値を利用できません。 なので、こういう場合は、コールバックという手法を試されたらどうでしょう。 例えば、今呼び出している関数がreceiveData() だとしたら data = receiveData(); のようにしたいワケですよね。 このdata を受け取って処理するコードを function procDATA(data){ //data を実際に処理するコード } の様に関数にして receiveData(procData); のようにして function receiveData(func){ //受信のコード } とすれば、 データの受信が終了した段階で func(data); と無名関数の中から呼び出せば処理関数にdata を渡すことができます。

first-try
質問者

お礼

返事が遅くなり、申し訳ありません。 ご回答ありがとうございました。 やはり、ご提案頂いた方法しかないようですね。 その方法で処理することにしました。

関連するQ&A