This offers examples of sending POST data to the server and displaying the server response.
Need more elaborate examples, examples of displaying the response in a new tab, in background tabs, and a link to using XMLHttpRequest for POST requests.
Preprocessing POST data
The aPostData
argument of the (global) loadURI()
, openDialog(), and (tab)browser.loadURIWithFlags()
methods expects the POST data in the form of an nsIInputStream
(because they eventually call nsIWebNavigation.loadURI()
) while POST data can be created using nsIMIMEInputStream
. Most of the time, POST data starts as a data string in the form of "name1=data1&name2=data2&..."
, so you must convert it before passing the data to one of the methods. Here is an example:
var dataString = "name1=data1&name2=data2"; // POST method requests must wrap the encoded text in a MIME // stream const Cc = Components.classes; const Ci = Components.interfaces; var stringStream = Cc["@mozilla.org/io/string-input-stream;1"]. createInstance(Ci.nsIStringInputStream); if ("data" in stringStream) // Gecko 1.9 or newer stringStream.data = dataString; else // 1.8 or older stringStream.setData(dataString, dataString.length); var postData = Cc["@mozilla.org/network/mime-input-stream;1"]. createInstance(Ci.nsIMIMEInputStream); postData.addHeader("Content-Type", "application/x-www-form-urlencoded"); postData.addContentLength = true; postData.setData(stringStream); // postData is ready to be used as aPostData argument ...
POSTing data to the current tab
There is a convience method in global scope (in Firefox, chrome://browser/content/browser.js):
loadURI(aURI, aReferrer, aPostData, aAllowThirdPartyFixup);
POSTing data to a new window
window.openDialog('chrome://browser/content', '_blank', 'all,dialog=no', aURI, aFlags, aReferrer, aPostData);