我有一个多语言的Jquery Mobile站点(Backend是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转换... 如何通过他们通过成功处理程序?
方面问题:这种方法是否可行,还是应该以更简单的方式完成?我需要重置视图和语言,我想保持应用程序运行,而不是一直硬重新加载页面,只是为了将单个coldfusion变量设置为“EN”到“DE”。
感谢您的帮助!
答案 0 :(得分:1)
除非我误解了您的问题,否则您的成功处理程序已经可以访问data
对象和e
事件对象,因为它已“关闭”该函数。唯一的问题是您将它们作为预期参数添加到成功处理函数中。将它们带走,您将可以访问从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(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) {
}
});
}