アプリ版:「スタンプのみでお礼する」機能のリリースについて

httpObj.onreadystatechange = function() {
if ((httpObj.readyState == 4) && (httpObj.status == 200)) {
var data = httpObj.responseText.split(",");

Ajaxで非同期通信をしています。
ステータスチェックをして、respinseTextを受け取るのですが、この変数dataをどうしてもreturnしたいのです。
このままだと、当然ローカル変数なのでreturnできません。

前に同じ質問をして、同期通信にすればよいのでは?とアドバイスをいただいたのですが、今回はどうしても非同期通信を行いたいのです。
変数varをそのまま別の関数の引数にする、という方法では解決できずに困っております。
何かよい方法があれば、アドバイスをお願いします。

A 回答 (1件)

基本的に考えれば、ココで呼び出されている無名関数は、イベントで呼び出されているので、たとえreturn したとしても、その返値を利用できません。


なので、こういう場合は、コールバックという手法を試されたらどうでしょう。
例えば、今呼び出している関数がreceiveData() だとしたら
data = receiveData();
のようにしたいワケですよね。
このdata を受け取って処理するコードを
function procDATA(data){
//data を実際に処理するコード
}
の様に関数にして
receiveData(procData);
のようにして
function receiveData(func){
//受信のコード
}
とすれば、
データの受信が終了した段階で
func(data);
と無名関数の中から呼び出せば処理関数にdata を渡すことができます。
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/08/03 09:47

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!