2014-04-24 2 views
1

에서 동일한 결과를 반복해서 표시하면 루프에서 동일한 결과가 발생합니다. 제게 실수를 저질렀다는 것을 누군가 이해하면 제발 알려주세요. 아이디어를 얻으려면이 스크린 샷을 참조하십시오.Javascript phonegap

나는 많은 곳을 경고하고 모든 것이 잘되는 것처럼 보입니다. 그러나 결과를 얻지 못한 이유는 모르겠다. "executeSql"은 루프의 여러 값과 함께 제대로 작동하지 않습니까?

또는 선택 쿼리에 실수가 있습니까? 왜 그런 문제가 발생하는지 알려주세요.

enter image description here

var db; 
    var shortName = 'WebSqlDB'; 
    var version = '1.0'; 
    var displayName = 'WebSqlDB'; 
    var maxSize = 65535; 


window.onload = function(){ 

     document.addEventListener("deviceready",init,false); 
    } 

function init(){ 

      if (!window.openDatabase) { 
       alert('Databases are not supported in this browser.'); 
       return; 
      } 

      db = openDatabase(shortName, version, displayName,maxSize); 

      db.transaction(function(tx){ 
      tx.executeSql('DROP TABLE post_details',nullHandler,nullHandler);  
      tx.executeSql('CREATE TABLE IF NOT EXISTS post_details(UserId INTEGER NOT NULL PRIMARY KEY, post_title TEXT NOT NULL, post_date TEXT NOT NULL,post_comment TEXT NOT NULL,post_content TEXT NOT NULL, post_categories TEXT NOT NULL, post_image TEXT)',[],nullHandler,errorHandler); 
       },errorHandler,successCallBack); 


      if(checkConnection() != "No network connection"){ 
       $.ajax({ 
       url: 'http://www.foduu.com/api/get_recent_posts/?callback=?', 
       type: 'GET', 
       dataType: 'json', 
       success: function(data){ 
        console.log(data); 

        var number_of_post = Object.keys(data.posts).length; 

        for(var i=0; i < number_of_post; i++){ 

             var ptitle = data.posts[i].title; 
             var pdate = data.posts[i].date; 
             var pccount = data.posts[i].comment_count; 
             var pcontent = data.posts[i].content; 
             var pcategories = data.posts[i].categories; 
             var pimage = "my image"; 
             //alert(ptitle +","+ pdate +","+ pccount+","+ pcategories +","+ pimage); 
             db.transaction(function(transaction) { 
              transaction.executeSql('INSERT INTO post_details(post_title,post_date,post_comment,post_content,post_categories,post_image) VALUES (?,?,?,?,?,?)',[ptitle,pdate,pccount,"pcontent",pcategories,pimage],nullHandler,errorHandler); 
             }); 
        } 


        db.transaction(function(transaction) { 
         transaction.executeSql('SELECT * FROM post_details;', [], 
          function(transaction, result) { 
          $.each(result.rows,function(index){ 
           var row = result.rows.item(index); 


           var post_single="<li class='post'>" + 
           "<a href='#' class='post_more'></a>" + 
           "<div class='post_right_reveal'>" + 
           "<h4><a href='#' onclick='swiperParent.swipeTo(4);'>"+ row['post_title'] +"</a></h4>" + 
           "</div>" + 
           "<div class='post_right_unreveal'>" + 
           "Posted in <a href='#'>blog category</a>" + 
           "<span class='post_comments'>25 Comments</span>" + 
           "<a href='#' class='post_readmore' onclick='swiperParent.swipeTo(4);'>read more</a>" + 
           "</div>" + 

            "<div class='post_left'>" + 
             "<span class='day'>7</span>" + 
             "<span class='month'>feb</span>" + 
            "</div>" + 
            "</li>"; 
            $('#posts-all').append(post_single); 
            $('#posts-all').trigger('create'); 


          }); 

         }); 
        },errorHandler,nullHandler); 

       }, 
       error: function(data){ 
         alert("Can Not Fetch data From server"); 

        } 


       }); 

      } 
      else 
       { 
        alert("No Internet Connection"); 
       } 

    } 

function checkConnection() { 
     var networkState = navigator.network.connection.type; 

     var states = {}; 
     states[Connection.UNKNOWN] = 'Unknown connection'; 
     states[Connection.ETHERNET] = 'Ethernet connection'; 
     states[Connection.WIFI]  = 'WiFi connection'; 
     states[Connection.CELL_2G] = 'Cell 2G connection'; 
     states[Connection.CELL_3G] = 'Cell 3G connection'; 
     states[Connection.CELL_4G] = 'Cell 4G connection'; 
     states[Connection.NONE]  = 'No network connection'; 

     return states[networkState]; 
    } 

function errorHandler(transaction, error) { 
    alert('Error: ' + error.message + ' code: ' + error.code); 

} 

function successCallBack() { 
    alert("DEBUGGING: success"); 
} 

function nullHandler(){}; 

그리고 난 내 main.js 다른 모든 JS 또는 CSS 파일 전에 파일을로드 할 수있는 방법은 무엇입니까?

나는 executeSql을 여러 번 실행 해 보았는데 아주 잘 동작했다. 하지만 여전히 FOR 루프에서 그것을 사용할 때 그저 계속해서 같은 제목을 반복해서 사용합니다. 필요한 경우 github에 코드를 올려 놓아서 시도해 볼 수 있습니다.

미리 감사드립니다.

답변

0

문제가 해결되었습니다. db.trasaction(..)에서 루프를 실행하고 있습니다. tx.excuteSql(...)이 문제가 해결되었습니다.

나는 혼자 해결책을 찾았습니다. :)

고마워요!

관련 문제