0

JSON を介して外部 SQL サーバー データベースからコンテンツを取得する jQuery モバイル アプリと、データベースとやり取りするサーバー サイド スクリプト (ColdFusion CFC) を作成しました。このアプリは、PhoneGap を使用してネイティブ アプリとしてパッケージ化されています。jQuery モバイル アプリが外部 SQL サーバー db に書き戻せるようにする必要があります。

モバイル開発は初めてですが、ColdFusion を使用したサーバー側の開発を数年経験しています。これを行う最善の方法は、モバイル アプリが送信されたフォーム要素の結果を処理のためにサーバー サイド スクリプトに送信することだと推測しています。ネイティブアプリがこれを「Webページとして」送信するのではなく、アプリにとどまってそれを実行したくありません(私が想定するAJax経由)。

私のサーバー サイド スクリプトは ColdFusion で記述され、入力のサニテーションとデータベース インタラクションを処理します...自分の jQuery アプリからサーバー サイド スクリプトにサブミットする最善の方法は何かを理解する必要があるだけですが、自分のネイティブ アプリケーション。

4

1 に答える 1

1

私はほとんど同じことをしています。サーバー側Coldfuison8/MySQL、フロントエンドJquery Mobile(、requireJS)、すべてのフォーム送信は、ページの再読み込みを回避するためにAJAXを介してルーティングされます。

で汎用フォーム送信者を使用してcontroller.jsいます。これは次のようになります。

var ajaxFormSubmit = 
     function ( form, service, formdata, targetUrl, successHandler, dataHandler, errorHandler ){
     $.ajax({
        async: false,
        type: "post",
        url: service,
        data: formdata,
        dataType: "json",
        success: function( objResponse ){
            if (objResponse.SUCCESS == true ){
                // alert("success!");
                // this passes the response object to the success handler 
                // in case data needs to be ... handled.
                dataHandler == "yes" ? successHandler( objResponse ) : successHandler();
            } else {
                // alert("AJAX failed!");
                if ( errorHandler != "" ){
                    errorHandler();
                    }
                }
            },
        error: function (XMLHttpRequest, textStatus, errorThrown) { 
            //alert("something else failed");
            showErrors( [["server-request-error", "server_error"]], XMLHttpRequest, textStatus, errorThrown );
            }
        });
    }

結果を応答オブジェクトとして返します。これには、、Success = True/falsedata存在する場合)および。が含まれますError = error message

関数呼び出しは次のようになります。

// the form 
var form = $(this).closest('form'),
    // trigger for cfcase inside my cfc
    switcher = form.find('input[name="form_submitted"]').val(),
    // which cfc to call
    service = "../cfcs/form_handler_abc.cfc",
    // the method in your cfc you are calling (validation/commit to database)
    method = "process",
    returnformat = "JSON",
    // not using 
    targetUrl = "",
    // serialized form plus any value you need to pass along
    formdata = form.serialize()+"&method="+method+"&returnformat="+returnformat,
    // specific error routine to run
    errorHandler = function(){
        // in my case, reset the whole form
        cleanUp( $('form:jqmData(search="regular")'), "results" )   
        },
    // inside my success handler I'm switching depending on submitted form
    // `response` will be the AJAX object.response = whatever you send back from the server
    successHandler = function( response )  {
        switch (switcher) {

            // form A - this is for a search form handling the results
            case "getProducts":
                // clean up
                $('.ajaxContainer, .pagination').addClass('fade out').remove();
                // AJAX data received
                var makeUp = response.DATA;
                // don't forget to trigger create to enhance all JQM elements you are sending
                $('.results').append( makeUp ).trigger('create');
                // redraw - will fire JQM updatelayout
                $(window).trigger('dimensionchange');
                // will set bindings on new elements
                bindResults( $('.results').closest('div:jqmData(role="page")') );
                break;

            case "A": 
                // do sth else
                break;

            case "B": 
                // do sth else
                break;          
                }
            };
        // now pass all of the above to the ajaxFormsubmit
        ajaxFormSubmit( form, service, formdata, targetUrl, successHandler, handleData, errorHandler);

私はいくつかのCFCを持っており、それぞれにメインcfswitchcfcase送信されたフォームがあります。このサンプルを使用してバックエンドを構築しました。始めるのにしばらく時間がかかりましたが、今では多かれ少なかれスムーズに実行されています。

上記に関してご不明な点がございましたら、お気軽にお問い合わせください。

于 2012-08-17T20:20:37.243 に答える