2014-10-09 4 views
-1

jQuery 약속을 사용하여 웹 SQL 데이터베이스 테이블에서 데이터 세트를 반환하고 $.when을 사용하면 데이터 세트를 반환하고이 링크에 따라 $.when 안에 사용할 수 있습니다.jQuery 약속을 사용하여 데이터베이스에서 값 가져 오기

Return multiple rows as an array from a WebSQL databse using javaScript

하지만 어떻게 데이터가 외부 $.when 설정하는 것이 사용할 수 있습니까?

var contact = getContacts(); 
$.when(contact).done(function(cont) { 
    for(var i = 0; i < cont.length; i++){ 
     // can use the 'cont' variable to access data in the table 
     // inside this '$.when', but can't use it outside this $.when block 
    } 
}); 

가 어떻게 이것을 달성 할 수

다음
function getContacts(){ 
    var defer = $.Deferred();  
    db.transaction(function(tx) { 
     tx.executeSql('SELECT * FROM contacts', [], function(tx, results) { 
      defer.resolve(results.rows); 
     },function(tx, err){ 
      alert("An internal error occurred. " + err.message); 
     }); 
    }); 
    return defer.promise(); 
} 

는 반환 및 $.when 내부에 그 값을 사용하는 소스입니다 : 여기

쿼리에 대한 소스입니까?

+1

당신은 정말'$ .when() 외부에서 사용할 수 없습니다를 참조하십시오. (완료)'콜백 그 유일한 장소이기 때문에 당신이 안정적으로 존재하는 것을 알고있다. 값이 준비되면 언제 어디서나 타이밍을 완전히 알 수 없습니다. 원하는 경우 다른 함수를 호출하여 데이터를 전달할 수 있지만 비동기 응답을 사용해야합니다. – jfriend00

+0

데이터 집합을 $ .when(). done() 안에있는 변수에 전달할 수 없으며 외부에서 호출 할 수 없습니다. 그럴 수있어? – vidulaJ

+0

죄송합니다, 귀하의 마지막 의견의 의미를 모르겠습니다. 약속과 비동기 코딩을 이해하는 데있어 중요한 부분은'.done()'핸들러가 나중에 언젠가 호출되고, 언제 호출 될 지 당신이 모른다는 것입니다. 그래서, 당신은'.done()'핸들러 내에서 다른 외부 변수에 결과를 넣을 수 있지만, 다른 코드는'.done() '핸들러 내에서 그 자체가 호출되지 않는 한 데이터가 거기에있을 때까지 기다릴 방법이 없습니다.()'핸들러. – jfriend00

답변

0

결과 만 수정해야 데이터가 반환됩니다.

function getContacts(){ 
    var defer = $.Deferred();  
    db.transaction(function(tx) { 
     tx.executeSql('SELECT * FROM contacts', [], function(tx, results) { 
      var data = []; 
      if (results.rows.length > 0) { 
       for (var i = 0; i < results.rows.length; i++) { 
        data.push(results.rows.item(i)); 
       } 
      } 
      defer.resolve(data); 
     },function(tx, err){ 
      alert("An internal error occurred. " + err.message); 
     }); 
    }); 
    return defer.promise(); 
} 

데이터에 액세스하려면이 방법을 사용하십시오.

var fetchContacts = getContacts(); 
var contacts = []; 
$.when(fetchContacts).then(function (cont) { 
    contacts = cont; 
}).done(function() { 
    // contacts is now not empty 
}); 

내 샘플 http://jsfiddle.net/xalvin11/6htanxhs/

+0

Alvin Magalona (앨빈 마갈로나). 나는 결과를 얻었고 문제는 내가 $.의 밖에 결과를 얻을 수 없다는 것이다. – vidulaJ

+0

jquery 지연에 대해 then() 및 done() 기능을 사용합니다. 샘플 코드를 업데이트했습니다. –

+0

'다음'을 사용하면 문제가 해결되지 않습니다. – vidulaJ