2013-09-25 3 views
0

경고 (result_set)는 처음으로 null을 표시하지만이 funcition이 두 번째로 호출되면 적절한 값을 표시합니다. 이 기능을 실행하는 간단한 버튼이 있습니다. 전역 변수 lesson_no가 처음 제대로 설정되었지만 result_set이 처음 설정되지 않았습니다.값이 변수에 처음으로 할당되지 않습니다.

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

웹 SQL은 AJAX와 같은 비동기 :

여기 내 JQuery와 모바일 코드를 간다. 결과 세트에 의존하는 모든 것은 콜백 함수에서 수행되어야합니다.

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

관련 문제