多言語の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」に設定するだけです。
手伝ってくれてありがとう!