0

多言語のJqueryMobileサイトがあります(バックエンドはColdfusion8 / MySQLです)。

私は汎用のAjax-form-posterを使用してデータをサーバーに「渡す」ので、スクリプト全体で次のようにそれぞれのAJAXパラメーターを渡します。

私のAjax発信者の1人:

$(document).on( "pagebeforechange.lang", function( e, data ) {
    if (typeof data.toPage === "string") {
        if (data.toPage.indexOf("?sprachwechsel=") > -1) {
            // stop
            e.preventDefault();
            // get the language from clicked link
            var viewSwitch  = $.mobile.path.parseUrl( data.toPage ).hash.replace( /.*sprachwechsel=/, "" ),
               service = "services/form_service_user.cfc",
               method = "process",
               returnformat = "JSON",
               targetUrl = "",
               // fake a form
               formdata = "form_submitted=lang&viewSwitch="+viewSwitch+"&method="+method+"&returnformat="+returnformat,
               // create the success handler
               successHandler = function(e, data) {
                   data.options.reloadPage = true;    
                   data.options.allowSamePageTransition = true;
                   data.options.transition = "fade";
                   // reload page with new language
                   $.mobile.changePage( window.location.href, data.options);    
                   };
            // hand over to Ajax
            ajaxFormSubmit( form, service, formdata, targetUrl, successHandler );
            }
         } 
    });
};

すべての発信者は、次のような中央のAJAXフォーム送信に移動します。

var ajaxFormSubmit = function ( form, service, formdata, targetUrl, successHandler ){
    $.ajax({
        async: false,
        type: "post",
        url: service,
        data: formdata,
        dataType: "json",
        success: function( objResponse ){
            if (objResponse.SUCCESS){
                alert("success");
                successHandler;
            } else { }
        },
        error: function (XMLHttpRequest, textStatus, errorThrown) { 
        }
    });
}

私はいつもフォームを送信しているわけではありませんが、この方法を使用して、表示する言語などのセッション設定を更新しようとしています。

私の質問:
pagebeforechangeイベントでJquery Mobile changePageをキャプチャしている場合、preventDefault、AJAX呼び出しを実行し、元のイベントとデータオブジェクトを使用して成功ハンドラーから新しいchangePageトランジションを起動したい...どのように渡すかそれらを成功ハンドラーまで

副次的な質問:このアプローチは実行可能ですか、それとももっと簡単な方法で行う必要がありますか?ビューと言語をかなりリセットする必要があります。アプリを実行し続け、ページを常にハードリロードする必要はなく、単一のColdFusion変数を「EN」から「DE」に設定するだけです。

手伝ってくれてありがとう!

4

1 に答える 1

1

私があなたの質問を誤解しない限り、これはその関数に「閉じられている」ので、成功ハンドラーはすでにdataオブジェクトとイベントオブジェクトにアクセスできます。e唯一の問題は、成功ハンドラー関数に期待されるパラメーターとしてそれらを追加していることです。それらを取り除くと、ajax呼び出しから返されたデータとこれらの他の2つの変数にアクセスできるようになります。そのようです...

$(document).on( "pagebeforechange.lang", function( e, data ) {
    if (typeof data.toPage === "string") {
        if (data.toPage.indexOf("?sprachwechsel=") > -1) {
            // stop
            e.preventDefault();
            // get the language from clicked link
            var viewSwitch  = $.mobile.path.parseUrl( data.toPage ).hash.replace( /.*sprachwechsel=/, "" ),
               service = "services/form_service_user.cfc",
               method = "process",
               returnformat = "JSON",
               targetUrl = "",
               // fake a form
               formdata = "form_submitted=lang&viewSwitch="+viewSwitch+"&method="+method+"&returnformat="+returnformat,
               // create the success handler
               successHandler = function(response) { // response is data from server
                   data.options.reloadPage = true; // data is from outer function
                   data.options.allowSamePageTransition = true;
                   data.options.transition = "fade";
                   // reload page with new language
                   $.mobile.changePage( window.location.href, data.options);    
                   };
            // hand over to Ajax
            ajaxFormSubmit( form, service, formdata, targetUrl, successHandler );
            }
         } 
    });
};

これで、ハンドラー関数をajax呼び出しに渡すことができます。

var ajaxFormSubmit = function ( form, service, formdata, targetUrl, successHandler ){
    $.ajax({
        async: false,
        type: "post",
        url: service,
        data: formdata,
        dataType: "json",
        success: successHandler,
        error: function (XMLHttpRequest, textStatus, errorThrown) { 
        }
    });
}
于 2012-05-20T11:07:24.883 に答える