Search code examples
javascriptpythondjangoyui

Sending JSON object back to server through YUI IO utility?


I am running a web page that generates random data and displays it in a HTML table. From the table I run a loop to gather the basic information (all rows that exist and exclude headers of table). This data gets stored in a JSON object called jData.

I want to send this data back to the server and store in a sqlite table named data. The way I am trying to do this is therough the YUI IO utility.

I am trying to wade the API documentation, but I am having no luck. I have two buttons on the page. One to generate the data and on to store the data. The store code is as follows:

var savedata = function(){
    var tabledata = Y.one("#generatedtable")._node;
    var jData = [];
    var i = 1;
    var length = tabledata.rows.length
    while (i<length){
        var samplerow = {};
        var r = tabledata.rows[i];
        samplerow.timestamp = r.cells[0].innerHTML;
        samplerow.volts = r.cells[1].innerHTML;
        samplerow.amps = r.cells[2].innerHTML;
        samplerow.kW = r.cells[3].innerHTML;
        samplerow.kWh = r.cells[4].innerHTML;
        jData.push(samplerow);
        i++;
        }

Y.io("./savedata", Y.System_Config.postjData(jData));
};

Using the chrome debugger tools I see the array being stored properly into jData. I need some basic help with Y.io and how to make posts. Any basic help is much appreciated. My server is run bu the Django Python web application framework.


Solution

  • You should read the IO User Guide. Making a POST request with JSON data in YUI is as simple as setting the HTTP method to POST, adding the data and setting the Content-Type to application/json. The only caveat is that you need to turn the JSON object into a string first using JSON.stringify().

    Y.io('/savedata', {
      method: 'POST',
      data: Y.JSON.stringify(jData),
      headers: {
        'Content-Type': 'application/json'
      },
      on: {
        success: function (id, response) {
          // do something with the response from the server, for example
          Y.one('#some-node').set('text', response.responseText);
        }
      }
    });
    

    You can read more about all the configuration options for IO in the "Configuration Object" section of the User Guide. There is an example there of a POST request with JSON data.