2012-03-02 58 views
1

我正在用WebSQL做一些工作:創建一個對象,通過ajax發送給服務器端腳本來完成一些更復雜的工作。我讀過類似任務的幾十個教程,但不管是什麼原因,我的代碼返回一個空的對象JSON.stringify(的結果):JSON.stringify返回空

function submit_entries(){ 
    url = "http://myurl.com/process.cfm" 
    send_data = new Object(); 
    db.transaction(function(tx){ 
     tx.executeSql('SELECT * FROM mytable', [], function(tx, results){ 
      var len = results.rows.length, i; 
      for(var i = 0; i <len; i++){ 
       send_data["person"+i] = {}; 
       send_data["person"+i].fname = results.rows.item(i).fname; 
      } 
     });//end tx.executeSql 
    });//end db.transaction 
    send_ajax(send_data); 
} 

function send_ajax(send_data){ 
    console.log(send_data); // log 1 
    var send_str = JSON.stringify(send_data); 
    console.log(send_str); //log 2 
    console.log($.parseJSON(send_str)); //log 3 
    /*$.ajax({ 
     url: url, 
     data: send_str, 
     type: "post", 
     contentType: "application/json", 
     dataType: 'json', 
     success: function(){ 
      console.log('yay it might have worked.') 
     } 
    })*/ 
} 

第一個日誌將輸出的對象。第二個是一組空括號「{}」,第三個將輸出一個空對象。我試過這個沒有嵌套的「人」+我的對象,並得到相同的結果。

+0

順便說一下,使用'{}'文字符號而不是'new Object()' – hugomg 2012-03-02 17:50:24

回答

1

看起來像你的db.transaction是異步的。如果是這種情況,那麼在您進入send_ajax調用時它將不會運行。

嘗試將send_ajax調用放在function(tx, results){ ... }回調中。

+0

Oy!就是這樣。謝謝! – 2012-03-02 17:54:46

+0

@DanHoerr:不要忘記將答案標記爲已接受;) – hugomg 2012-03-02 17:57:06

+0

等待定時器atm;絕對不會忘記! – 2012-03-02 17:58:24