2012-03-02 8 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.') 
     } 
    })*/ 
} 

最初のログが出力オブジェクトをなります。 2番目の空白は中かっこ "{}"のセットで、3番目の空白は空のオブジェクトを出力します。私はネストされた "人" + iオブジェクトなしでこれを試して、同じ結果を得ました。

+0

Btwは、 'new Object()'の代わりに '{}'リテラル表記を使用します。 – hugomg

答えて

1

db.transactionのように見えますが、非同期です。このような場合、send_ajax呼び出しに到達するまでには実行されません。

function(tx, results){ ... }コールバックにsend_ajaxコールを入れてみてください。

+0

Oy!それはそれだった。ありがとうございました! –

+0

@DanHoerr:回答を受け入れたとマークすることを忘れないでください;) – hugomg

+0

タイマーatmを待っています。間違いなく忘れないだろう! –

関連する問題