我有一个多语言的 Jquery 移动网站(后端是 Coldfusion8/MySQL)。
我正在使用通用 Ajax-form-poster 将数据“传递”到服务器,我在整个脚本中调用该服务器,并传递相应的 AJAX 参数,如下所示:
我的Ajax 调用者之一:
$(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 转换......我如何通过他们通过到成功处理程序?
附带问题:这种方法可行还是应该以更简单的方式完成?我需要相当多地重置视图和语言,并且我想保持应用程序运行并且不必一直硬重新加载页面,只是为了将单个冷融合变量从“EN”设置为“DE”。
感谢帮助!