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

Первый журнал будет выводить объект. Второй - пустой набор фигурных скобок «{}», а третий - пустой объект. Я пробовал это без вложенных объектов «person» + i и получал те же результаты.

+0

Btw, используйте '{}' буквальную нотацию вместо 'new Object()' – hugomg

ответ

1

Похоже, что ваш db.transaction является асинхронным. Если это так, он не будет запущен к моменту получения вызова send_ajax.

Попробуйте поместить вызов send_ajax внутри обратного вызова function(tx, results){ ... }.

+0

Oy! вот и все. Спасибо! –

+0

@ DanHoerr: не забудьте отметить ответ как принято;) – hugomg

+0

ожидания на таймере atm; определенно не забудет! –

Смежные вопросы