2013-09-25 55 views
0

alert(result_set)第一次顯示null,但當第二次調用此函數時,它會顯示正確的值。有一個簡單的按鈕正在執行此功能。全局變量lesson_no首次正確設置,但result_set不是第一次設置。值不是第一次分配給變量

這裏去我的jQuery移動代碼:

result_set=null; 
//load database for the lesson 
function loadLesson(lessonno){ 
    $(".audio-pause").hide(); 
    stopAudio(); 
    clearMarker(); 
    lesson_no = lessonno; 
    $("#lessonno").html("Lesson "+lesson_no); 
    $("#lessonImage").attr("src","lessons/Lesson_"+lesson_no+".png");  
    $('.audio-position').html(""); 

    var sql = "select Lesson,x1,y1,x2,y2,starttime from lessoninfo where Lesson="+lesson_no; 
    db.transaction (function (transaction){ 
     transaction.executeSql (sql, undefined, function (transaction, result){ //alert(result.rows.length); 
      result_set = result; 
     }); 
    });alert(result_set) 
    setImageVariables(); 
    markerCount=0; 
    $(".audio-play").show(); 
} 
+2

我認爲'db.transaction'是異步的,這是正常的,它不會更新變量,直到執行回調。 –

+0

當我使用鼠標點擊第二次調用此函數時,t確實工作正常,但不是第一次 – user2780638

回答

1

的Web SQL是異步的,如AJAX。任何取決於結果集的東西都必須在回調函數中完成。

function loadLesson(lessonno){ 
    $(".audio-pause").hide(); 
    stopAudio(); 
    clearMarker(); 
    lesson_no = lessonno; 
    $("#lessonno").html("Lesson "+lesson_no); 
    $("#lessonImage").attr("src","lessons/Lesson_"+lesson_no+".png");  
    $('.audio-position').html(""); 

    var sql = "select Lesson,x1,y1,x2,y2,starttime from lessoninfo where Lesson="+lesson_no; 
    db.transaction (function (transaction){ 
     transaction.executeSql (sql, undefined, function (transaction, result){ //alert(result.rows.length); 
      result_set = result; 
      alert(result_set); 
      setImageVariables(); 
      markerCount=0; 
      $(".audio-play").show(); 
     }); 
    }); 
} 
+0

當我第二次使用鼠標單擊而不是第一次調用此函數時,我的功能確實正常工作 – user2780638

+0

我認爲您需要學習「異步」意味着什麼。 'db.transaction()'立即返回,它不會等待查詢完成或回調函數運行。變量將不會被設置,直到發生,這是後來。這就是爲什麼變量沒有設置。 – Barmar

+0

您所看到的是當您第二次點擊時,您會看到第一次設置的價值。 – Barmar