web-dev-qa-db-ja.com

AJAX response Text?

AJAX開発を行うためにプロトタイプを使用し、次のようなコードを使用します。

somefunction: function(){
    var result = "";
    myAjax = new Ajax.Request(postUrl, {
        method: 'post',
        postBody: postData,
        contentType: 'application/x-www-form-urlencoded',
        onComplete: function(transport){
            if (200 == transport.status) {
                result = transport.responseText;
            }
        }
    });
    return result;
}

そして、「結果」は空の文字列であることがわかりました。だから、私はこれを試しました:

somefunction: function(){
    var result = "";
    myAjax = new Ajax.Request(postUrl, {
        method: 'post',
        postBody: postData,
        contentType: 'application/x-www-form-urlencoded',
        onComplete: function(transport){
            if (200 == transport.status) {
                result = transport.responseText;
                return result;
            }
        }
    });

}

しかし、それもうまくいきませんでした。使用する他のメソッドのresponseTextを取得するにはどうすればよいですか?

40
DNB5brims

onCompleteは、someFunctionの動作が完了してからずっと後に呼び出されることに注意してください。必要なのは、コールバック関数をパラメーターとしてsomefunctionに渡すことです。この関数は、プロセスの動作が完了すると呼び出されます(つまり、onComplete):

somefunction: function(callback){
    var result = "";
    myAjax = new Ajax.Request(postUrl, {
        method: 'post',
        postBody: postData,
        contentType: 'application/x-www-form-urlencoded',
        onComplete: function(transport){
            if (200 == transport.status) {
                result = transport.responseText;
                callback(result);
            }
        }
    });

}
somefunction(function(result){
  alert(result);
});
28
Marius

コードに「非同期:false」を追加してみませんか?私の場合、うまくいきました:)

3
someone