2012-03-02 60 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