0

我有一个多语言的 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”。

感谢帮助!

4

1 回答 1

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) { 
        }
    });
}
于 2012-05-20T11:07:24.883 回答