0

私はjqueryモバイルが初めてです。

私の問題は最初に、データベースから値を取得する必要があり (fn toGetQuestionNumber を使用して QnNumber の場合)、その値を xmlParser 関数で使用する必要があります。

適切な順序で実行された場合、アラートは 1 番目、2 番目、3 番目の順序で表示されます。

しかし、表示されているのは、アラートが 2 番目、3 番目、1 番目として発生していることです。(db 関数 toGetQuestionNumber が最後にのみ実行されることを意味します!)

toGetQuestionNumber を最初に実行する方法 - QnNumber の値を取得してから xmlParser を実行する方法は?

///////////////////////////////////////////////

$('#alpha').live('pageshow', function(event) {
    var day         = getUrlVars()["day"];
    var module      = getUrlVars()["module"];

    var QnNumber=1;


        var db = openDatabase("Exam", "1.0", "The Exam", 200`enter code here`000);
        var dataset;
        var selectAllStatement = "SELECT  TotQn, TotAnswd FROM QuizScore where DayID=" + day + " and ModuleID=" + module ;

        function toGetQuestionNumber() {

            db.transaction(function(tx) 
            {
              tx.executeSql(selectAllStatement, [], function(tx, result) 
              {
                dataset = result.rows;
                for (var i = 0, item = null; i < dataset.length; i++) 
                {
                  item = dataset.item(i);
                  //if(item['TotAnswd']>0)
                  //{
                     QnNumber = item['TotAnswd'];
                     alert('First=' +QnNumber); ////// First Alert
                  //}
                }
              });
            });
      }


    toGetQuestionNumber();
      alert('Second' + QnNumber);  ////// Second Alert


    var xml;
    $(document).ready(function(){
        $.ajax({
            type: "GET",
            url: "data/quiz.xml",
            dataType: "xml",
            success: xmlParser
        });
    });


         //loading XML file and parsing to .main div.
       function xmlParser(data) 
        {
            xml = data;
            $('#list').empty();

             alert('Third' + QnNumber); ////// Third Alert
        }

    $('#list').trigger('create');


    });

/////////////////////////////////////////////// //////

4

1 に答える 1

1

JavaScriptが止まらない

toGetQuestionNumber(); 直接返されます。tx.executeSql は待機しません。

したがって、alert('Second' + QnNumber); 最初に呼び出される

次に、ページの準備完了コールバックで ajax リクエストを行いますが、この準備完了コールバックを置く場所ではありません

する代わりに

.live
  .ready

行う

.ready
  .live

$.ajax や tx.executeSql のように、アクションの後にいくつかのコールバックがあることを覚えておいてください。

最初のアクションの後に 2 番目のアクションを呼び出す場合は、最初のアクションの終了コールバックで 2 番目のアクションを起動します

このようなことを試してください:

$(document).ready(function(){
$('#alpha').live('pageshow', function(event) {
    var day         = getUrlVars()["day"];
    var module      = getUrlVars()["module"];

    var QnNumber=1;

    var db = openDatabase("Exam", "1.0", "The Exam", 200`enter code here`000);
    var dataset;
    var selectAllStatement = "SELECT  TotQn, TotAnswd FROM QuizScore where DayID=" + day + " and ModuleID=" + module ;
    var xml;

    //loading XML file and parsing to .main div.
    function xmlParser(data) 
    {   // if here ajax request is end
        xml = data;
        $('#list').empty();
        alert('Third' + QnNumber); ////// Third Alert

        $('#list').trigger('create');
    }

    function toGetQuestionNumber() {
        db.transaction(function(tx) 
        {
            tx.executeSql(selectAllStatement, [], function(tx, result) 
            {
                dataset = result.rows;
                for (var i = 0, item = null; i < dataset.length; i++) 
                {
                  item = dataset.item(i);
                  //if(item['TotAnswd']>0)
                  //{
                      QnNumber = item['TotAnswd'];
                      alert('First=' +QnNumber); ////// First Alert

                      // if here, db request is end !

                      alert('Second' + QnNumber);  ////// Second Alert

                      // call ajax request

                      $.ajax({
                      type: "GET",
                      url: "data/quiz.xml",
                      dataType: "xml",
                      success: xmlParser
                      });
                  //}
                }
            });
        });
    }

    // start all
    toGetQuestionNumber();

});
});
于 2013-02-09T11:54:59.710 に答える