1

ダイレクトWebリモーティングライブラリを使用して、アプリケーションでいくつかのajax呼び出しを実行しています。サービスコールからの応答が遅れることに起因すると思われる問題が発生しています。以下は、問題が発生していると思われるコードの一部です。問題はgetDefaultReviewerTypeCodeにあり、戻り変数は他の「スタッフ」プロセスが終了するまでコールバックで設定されません。Javaスクリプトの処理を続行する前に応答を待機するようにDWRに指示する方法はありますか?

function makeProtocolReviewerTypesDropDown(reviewerTypes, reviewerIndex) {
var defaultReviewerType = getDefaultReviewerTypeCode();

...
var option = document.createElement('option');
option.setAttribute("value", "");
if (defaultReviewerType == '') {
    option.setAttribute("selected", "selected");
}

...

for (var i = 0; i < reviewerTypes.length; i += 2) {
    var reviewerType = reviewerTypes[i].replace(/^\t*/, '');
    option = document.createElement('option');
    option.setAttribute("value", reviewerType);
    if (defaultReviewerType == reviewerType) {
        option.setAttribute("selected", "selected");
    }
    option.text = reviewerTypes[i+1];
    addSelectOption(selectElement, option);
}

return selectElement;
}

function getDefaultReviewerTypeCode() {
var defaultReviewTyper;
var dwrReply = {
        callback:function(data) {
            if ( data != null ) {   
                defaultReviewTyper = data;
            } else {
                defaultReviewTyper = '';
            }
        }
};
IacucProtocolActionAjaxService.getDefaultCommitteeReviewTypeCode(dwrReply);
return defaultReviewTyper;
}
4

1 に答える 1

2

最良の方法は、DWR呼び出しに続くすべてのコードを別のメソッドにカプセル化し、それをDWRコールバックから呼び出すことです。そうすれば、DWRの結果に依存するコードは、DWRが戻った後にのみ呼び出されることが保証されます。

于 2012-08-15T21:11:07.897 に答える