0

私のJSPにはリンクとボタンがあり、どちらもAjaxアクションを呼び出して結果で使用したいと考えています。

リンクとボタンの両方のイベントを作成し、Ajax を呼び出します。呼び出し元のメソッドに結果を返す必要があります。

//event for button
$(document).on('click', ".addComponent", function(){
        var htmlContent=$(this).html();
        $('.addComponent').html('Loading...').fadeIn();
        var urlAction=$(this).attr("id");
        var dataFields=$(this).data('val');
        var data=callActionUsingAjax(urlAction, dataFields); //data not returning from ajax
        var ajaxActionResult=ajaxResult(data);
        $('.addComponent').html(htmlContent).fadeIn();
        $('#popUpForm').html(ajaxActionResult);
        $('#popUpForm').dialog("open");
        return false;
    });

//event for link
$(document).on('click', "#dimComponentList >TBODY > TR > TD > a", function(){
        $("body").css("cursor", "progress");
        var urlAction=$(this).attr("href");
        var dataFields="";
        var data=callActionUsingAjax(urlAction, dataFields);
        var ajaxActionResult=ajaxResult(data); //ajax not returning data
        $("body").css("cursor", "auto");
        $('#applicationList').html(ajaxActionResult);
        return false;
     });

これがAjaxを呼び出す私の方法です

function callActionUsingAjax(urlAction,datafields)
    {
        $.ajax({
            type: "post",
            url: urlAction,
            data: datafields,
            success: function (data) {
                return data;
            }
        });
    }

このリンクを試しましたが、そのようなカスタム メソッドでコールバックを使用する方法がわかりません。他にも、これを Ajax と呼ぶ必要があるイベントがいくつかあります。そのため、カスタム メソッド内で Ajax を使用しました。

誰でも私に解決策を教えてもらえますか?

4

1 に答える 1

0

Ajax 呼び出しは非同期であり、実行が進行している間は完了するまでに時間がかかります。そのため、「戻り値」にデータがありません。

コールバック関数をに渡し、ハンドラーcallActionUsingAjaxで呼び出す必要がありますsuccess(または、ロジックに依存する完了またはエラー.

このような:

$(document).on('click', ".addComponent", function(){
    //... other stuff
    callActionUsingAjax(urlAction, dataFields, function (data) { //this is tha callback (third argument)
        var ajaxActionResult=ajaxResult(data);
        $('.addComponent').html(htmlContent).fadeIn();
        $('#popUpForm').html(ajaxActionResult);
        $('#popUpForm').dialog("open");
        // all of the above happens when ajax completes, not immediately.
    }); 

    return false;
});

function callActionUsingAjax(urlAction, datafields, callback)
{
    $.ajax({
        type: "post",
        url: urlAction,
        data: datafields,
        success: function (data) {
            callback(data);
        }
    });
}
于 2013-07-03T10:31:34.680 に答える