Sample program that demonstrates how to use XMLHttpRequest POST and GET. The example is a simple roku remote app i wrote for younger kids to use.

XMLHttpRequest Example

kidsroku.js
//Called when application is started.
function OnStart()
{
     //keep in portrait orientation
     app.SetOrientation("Portrait");
 
//Check if roku.pref exists
existsFile = app.FileExists( "/sdcard/kidsroku/roku.pref" );
 
//check for for file existance
if (existsFile == 0) 
{
 //create folder for preferences
 app.MakeFolder( "/sdcard/kidsroku/" );
 //default value
 address = "http://172.16.20.84:8060/";
 //write preference file
 app.WriteFile( "/sdcard/kidsroku/roku.pref", address );
}
 
// read file roku.pref
address = app.ReadFile("/sdcard/kidsroku/roku.pref");
 
    //Create a layout with objects vertically centered.
    lay = app.CreateLayout( "Linear""VCenter,FillXY" );    
    //set background 
    lay.SetBackground( "/Sys/Img/BlackBack.png" ); 
 
    //Create a layout we can slide over the main layout. 
    //(This hidden layout is actually on top of the main 
    //layout, it just appears to slide from the left) 
    laySlide = app.CreateLayout( "Linear""FillXY" ); 
    laySlide.SetPadding( 00.100 );  
    laySlide.SetBackground( "/Sys/Img/GreenBack.png" ); 
    laySlide.SetVisibility( "Hide" );
 
    //Create Verticle sub-layout for buttons.
    layVert = app.CreateLayout( "Linear""Verticle" );    
 
    //Create Horizontal sub-layout for buttons
    layHori = app.CreateLayout("linear""Horizontal");
    layVert.AddChild( layHori);
    
    //Create Home button.
    btnHome = app.CreateImage( "Img/home.png", .25, -1 );
    btnHome.SetMargins(.0,.01,.15,.08);
    btnHome.SetOnTouchDown( btnHome_OnTouch );
    layHori.AddChild( btnHome );
    
    //Create Back button.
    btnBack = app.CreateImage( "Img/back.png", .25, -1 );
    btnBack.SetMargins(.15,.01,.0,.08);
    btnBack.SetOnTouchDown( btnBack_OnTouch );
    layHori.AddChild( btnBack );
    
    //Create Up button.
    btnUp = app.CreateImage( "Img/up.png",.35,-1 );
    btnUp.SetOnTouchDown( btnUp_OnTouch );
    layVert.AddChild( btnUp );
    
    //Create horizontal layout2 for buttons
    layHori2 = app.CreateLayout("linear""Horizontal");
    layVert.AddChild( layHori2);
    
    //Create Left button.
    btnLeft = app.CreateImage( "Img/left.png",.35,-1 );
    btnLeft.SetOnTouchDown( btnLeft_OnTouch );
    layHori2.AddChild( btnLeft );
    
    //Create Select button.
    btnSelect = app.CreateImage( "Img/select.png",.35,-1 );
    btnSelect.SetOnTouchDown( btnSelect_OnTouch );
    layHori2.AddChild( btnSelect );
    
    //Create Right button.l
    btnRight = app.CreateImage( "Img/right.png",.35,-1 );
    btnRight.SetOnTouchDown( btnRight_OnTouch );
    layHori2.AddChild( btnRight );
    
    //Create Down button.
    btnDown = app.CreateImage( "Img/down.png",.35,-1 );
    btnDown.SetOnTouchDown( btnDown_OnTouch );
    layVert.AddChild( btnDown );
    
    //Create horizontal layout3 for buttons
    layHori3 = app.CreateLayout("linear""Horizontal");
    layVert.AddChild( layHori3);
   
    //Create button and add to main layout. 
    btnSave = app.CreateButton( "Save"0.30.06"gray" ); 
    btnSave.SetOnTouch( btnSave_OnTouch ); 
    laySlide.AddChild( btnSave );
 
    //Create menu
    app.SetMenu("IP Address,Find Roku,Help");
 
    //Create text edit
    newAddress = app.CreateTextEdit( address, 0.80.3 ); 
    laySlide.AddChild( newAddress );
 
    //Add verticle layout to main layout.
    lay.AddChild( layVert );
    
    //Add layout to app.    
    app.AddLayout( lay );
    app.AddLayout(laySlide);
 
}
 
 //webscript post
function webscript_post()
{
    xhr = new XMLHttpRequest();
    xhr.open('POST', address + command,true);
    xhr.timeout = setTimeout("xhr.abort()"300);
    xhr.setRequestHeader('Content-type''application/x-www-form-urlencoded');
    xhr.send(null);
    app.Vibrate( "0,20" );
 
}
 
//Called when user touches Home button.
function btnHome_OnTouch()
{
command = 'keypress/home'
webscript_post()
}
 
//Called when user touches Back button.
function btnBack_OnTouch()
{ 
command = 'keypress/back'
webscript_post()
}
 
//Called when user touches up button.
function btnUp_OnTouch()
{
command = 'keypress/up'
webscript_post()
}
 
//Called when user touches Left button.
function btnLeft_OnTouch()
{
command = 'keypress/left'
webscript_post()
}
 
//Called when user touches Select button.
function btnSelect_OnTouch()
{
command = 'keypress/select'
webscript_post()
}
 
//Called when user touches Right button.
function btnRight_OnTouch()
{
command = 'keypress/right'
webscript_post()
}
 
//Called when user touches Down button.
function btnDown_OnTouch()
{
command = 'keypress/down'
webscript_post()      
} 
 
//Called when user touches IP Adress menu item.
function btnIpAddress_OnTouch()
{
laySlide.Animate( "SlideFromLeft" );
 
    app.Alert( "http://172.16.20.56:8060/""make sure to use this format " );
}
 
//Called when user touches Find Roku menu item
function btnFindRoku_OnTouch()
{
   findRoku()
}
 
//help
function help() {
   app.Alert("A simple roku remote for kids or anyone looking for a basic easy to use remote");
}
 
//Called when user touches menu item Ip button
function OnMenu(item)
{
if (item == "IP Address") {
    btnIpAddress_OnTouch()
}
 
// Called when user touches menu item Find Roku
if (item=="Find Roku") {
    btnFindRoku_OnTouch()
}
if (item=="Help") {
   help()
}
}
 
//Called when user touches save button
function btnSave_OnTouch()
{
laySlide.Animate( "SlideToLeft" );
address = newAddress.GetText();
app.WriteFile( "/sdcard/kidsroku/roku.pref", address );
 
}
 
// *****************************************************
 
//Search network for roku
function findRoku() 
{ 
 
//Get ip of device
    ip = app.GetIPAddress();
    startNum = ip.split (".");
    ipEndd = Math.floor(startNum[3]/50);
    ipEnd = ipEndd * 50+1
 
//Create a layout with objects vertically centered. 
    lay_findRoku = app.CreateLayout( "linear""VCenter,FillXY" );
 
//Create a button to send request. 
    btn = app.CreateButton( "Find Roku"0.90.1 );  
    btn.SetMargins( 0000 );  
    btn.SetOnTouch( btn_OnTouch );  
    lay_findRoku.AddChild( btn );  
 
//Create a text label to show results. 
    txt = app.CreateText( ""0.90.8"Left,Multiline" )
    txt.SetBackColor( "#ff222222" );  
    txt.SetTextSize( 12 ); 
    lay_findRoku.AddChild( txt ); 
 
// Create a button to cancel request
    btnCancel = app.CreateButton( "Cancel"0.90.1);
    btnCancel.SetMargins(0000);
    btnCancel.SetOnTouch( loadRemote );
    lay_findRoku.AddChild( btnCancel );
     
//Add layout to app.     
    app.AddLayout( lay_findRoku ); 
 
}    
 
//Load roku remote
function loadRemote()
{
app.RemoveLayout(lay_findRoku);
OnStart()
}
 
//Handle button press. 
function btn_OnTouch()  
{  
 
//find device
  ipArray = ip.split (".");
  ipBase = (ipArray[0] + "." + ipArray[1] + "." + ipArray[2] + ".");
  ipBase += ipEnd;
  ipBase += ":8060/"
  txt.SetText( "Checking..." + ipBase);
  
//Send request to roku
  url = "http://" + ipBase + "/query/apps";
  SendRequest( url  ); 
} 
 
//Send an http get request. 
function SendRequest( url ) 
{ 
    httpRequest = new XMLHttpRequest();    
    httpRequest.open("GET", url, true); 
    httpRequest.onreadystatechange = function() { HandleReply(httpRequest); };
     httpRequest.send(null);   
}
 
//Handle the roku's reply
function HandleReply( httpRequest ) 
{ 
   if( httpRequest.readyState==4 ) 
    { 
        //If we got a valid response. 
        if( httpRequest.status==200 ) 
        { 
   resTxt = httpRequest.responseText;
 
//split returned xml
   split1 = resTxt.split('"');
   split2 = resTxt.split('>');
 
//get length of array split1
split1Length = split1.length
 
//get length of array split2
split2Length = split2.length
 
//build array of id's
   y = 0
   idArray = ["0"]
for(z=1; z<split1Length; z=z+4)
   {
   idArray[y] = split1[z]
   y++
   }
 
//build array of channels= 0
chanArray = ["0"]
for(x=2; x<split2Length; x=x+2)
{
chanArray[w] = split2[x]
w++
}
 
//trim array for channels
split3Length = chanArray.length
channels =""
for(v=0; v<split3Length; v++)
   {
   channels = channels + chanArray[v];
   }
 
//split xml
split4 = channels.split('</app');
split4Length = split4.length= 0
channelsArray = ["0"]
for(s=0; s<split4Length; s++)
   {
   channelsArray[t] = split4[s]
   t++
   }
 
//view channels
display ="Configuration Update Sucessful\n\nRoku IP:" +  ipBase + "\n\nYour Channels:\n\n"
channelsLength = channelsArray.length
for(s=0; s<channelsArray.length; s++)
   {
   display = display + channelsArray[s] + "\n"
   }
 
//set text
txt.SetText(display);
 
//write ip
writeFile();
 
//Load Roku Remote
setTimeout("loadRemote()"3000);
 
        } 
   //An error occurred 
   else 
   {
            txt.SetText( "Error: " + httpRequest.status + httpRequest.responseText); 
    
  ipEnd++
  if (ipEnd > 254)
  {ipEnd = 1}
  setTimeout("btn_OnTouch()"250);
}
}
 
//write file for ip address
function writeFile()
{
app.WriteFile( "/sdcard/kidsroku/roku.pref""http://" + ipBase );
  app.Vibrate( "0,100,30,100,50,300" );
}
} 

This script uses .png files as buttons that will need to created or modified to use standard buttons…I tried to upload but don't have the permissions to upload images.