nsIXMLHttpRequest

  • Revision slug: nsIXMLHttpRequest
  • Revision title: nsIXMLHttpRequest
  • Revision id: 59571
  • Created:
  • Creator: Cancerbero sgx
  • Is current revision? No
  • Comment /* statusText */

Revision Content

page created by Sebastián (Cancerbero) Gurin sgurin@(nospam)montevideo.com.uy

Summary

Mozilla's XMLHttpRequest is modelled after Microsoft's IXMLHttpRequest object. The goal has been to make Mozilla's version match Microsoft's version as closely as possible, but there are bound to be some differences.

In general, Microsoft's documentation for IXMLHttpRequest can be used. Mozilla's interface definitions provide some additional documentation. The web page to look at is http://www.mozilla.org/xmlextras/.

Mozilla's XMLHttpRequest object can be created in JavaScript like this:

  new XMLHttpRequest()

compare to Internet Explorer:

  new ActiveXObject("Msxml2.XMLHTTP")

From JavaScript, the methods and properties visible in the XMLHttpRequest object are a combination of nsIXMLHttpRequest and nsIJSXMLHttpRequest there is no need to differentiate between those interfaces.

From native code, the way to set up onload and onerror handlers is a bit different. Here is a comment from Johnny Stenback <jst@netscape.com>:

The mozilla implementation of nsIXMLHttpRequest implements the interface nsIDOMEventTarget and that's how you're supported to add event listeners. Try something like this: nsCOMPtr<nsIDOMEventTarget> target(do_QueryInterface(myxmlhttpreq)); target->AddEventListener(NS_LITERAL_STRING("load"), mylistener, PR_FALSE) where mylistener is your event listener object that implements the interface nsIDOMEventListener. The 'onload', 'onerror', and 'onreadystatechange' attributes moved to nsIJSXMLHttpRequest, but if you're coding in C++ you should avoid using those.

Though actually, if you use addEventListener from C++ weird things will happen too, since the result will depend on what JS happens to be on the stack when you do it....

Conclusion: Do not use event listeners on XMLHttpRequest from C++, unless you're aware of all the security implications. And then think twice about it.

Interface Code

 [scriptable, uuid(7b3b3c62-9d53-4abc-bc89-c33ce78f439f)]
 interface nsIXMLHttpRequest : nsISupports
 {
   //attribtues
   readonly attribute nsIChannel channel;
   readonly attribute nsIDOMDocument responseXML;
   readonly attribute AString responseText;
   readonly attribute unsigned long status;
   readonly attribute AUTF8String statusText;
   readonly attribute long readyState;
   attribute boolean multipart;
   //methods
   void   abort();
   string getAllResponseHeaders();
   ACString getResponseHeader(in AUTF8String header);
   [noscript] void   openRequest(in AUTF8String method,
                                 in AUTF8String url,
                                 in boolean async,
                                 in AString user,
                                 in AString password);
   void   open(in AUTF8String method, in AUTF8String url);
   void   send(in nsIVariant body);
   void   overrideMimeType(in AUTF8String mimetype);
 };

Attributes

channel

 readonly attribute nsIChannel channel;

The request uses a channel in order to perform the request. This attribute represents the channel used for the request. NULL if the channel has not yet been created.

In a multipart request case, this is the initial channel, not the different parts in the multipart request.

Mozilla only. Requires elevated privileges to access.

responseXML

 readonly attribute nsIDOMDocument responseXML

The response to the request is parsed as if it were a text/xml stream. This attributes represents the response as a DOM Document object. NULL if the request is unsuccessful or has not yet been sent.

responseText

 readonly attribute AString responseText;

The response to the request as text. NULL if the request is unsuccessful or has not yet been sent.

status

 readonly attribute unsigned long status;

The status of the response to the request for HTTP requests.

statusText

 readonly attribute AUTF8String statusText;

The string representing the status of the response for HTTP requests.

readyState

 readonly attribute long readyState;

The state of the request. Possible values:

0 UNINITIALIZED open() has not been called yet. 1 LOADING send() has not been called yet. 2 LOADED send() has been called, headers and status are available. 3 INTERACTIVE Downloading, responseText holds the partial data. 4 COMPLETED Finished with all operations.

multipart

 attribute boolean multipart;

Set to true if the response is expected to be a stream of possibly multiple (XML) documents. If set to true, the content type of the initial response must be multipart/x-mixed-replace or an error will be triggerd. All requests must be asynchronous.

This enables server push. For each XML document that's written to this request, a new XML DOM document is created and the onload handler is called inbetween documents. Note that when this is set, the onload handler and other event handlers are not reset after the first XML document is loaded, and the onload handler will be called as each part of the response is received.

Methods

Revision Source

<p><span class="comment">page created by Sebastián (Cancerbero) Gurin sgurin@(nospam)montevideo.com.uy</span>
</p>
<h3 name="Summary">Summary</h3>
<p>Mozilla's XMLHttpRequest is modelled after Microsoft's IXMLHttpRequest object. The goal has been to make Mozilla's version match Microsoft's version as closely as possible, but there are bound to be some differences.
</p><p>In general, Microsoft's documentation for IXMLHttpRequest can be used. Mozilla's interface definitions provide some additional documentation. The web page to look at is http://www.mozilla.org/xmlextras/.
</p><p>Mozilla's XMLHttpRequest object can be created in JavaScript like this:
</p>
<pre class="eval">  new XMLHttpRequest()
</pre>
<p>compare to Internet Explorer:
</p>
<pre class="eval">  new ActiveXObject("Msxml2.XMLHTTP")
</pre>
<p>From JavaScript, the methods and properties visible in the XMLHttpRequest object are a combination of nsIXMLHttpRequest and <a href="en/NsIJSXMLHttpRequest">nsIJSXMLHttpRequest</a> there is no need to differentiate between those interfaces.
</p><p>From native code, the way to set up onload and onerror handlers is a bit different. Here is a comment from Johnny Stenback &lt;jst@netscape.com&gt;:
</p>
<blockquote>The mozilla implementation of nsIXMLHttpRequest implements the interface  nsIDOMEventTarget and that's how you're supported to add event listeners. Try something like this:

   nsCOMPtr&lt;nsIDOMEventTarget&gt; target(do_QueryInterface(myxmlhttpreq));
   target-&gt;AddEventListener(NS_LITERAL_STRING("load"), mylistener, PR_FALSE)

where mylistener is your event listener object that implements the interface nsIDOMEventListener.

The 'onload', 'onerror', and 'onreadystatechange' attributes moved to nsIJSXMLHttpRequest, but if you're coding in C++ you should avoid using those.</blockquote>
<p>Though actually, if you use addEventListener from C++ weird things will happen too, since the result will depend on what JS happens to be on the stack when you do it....
</p><p>Conclusion: Do not use event listeners on XMLHttpRequest from C++, unless you're aware of all the security implications. And then think twice about it.
</p>
<h3 name="Interface_Code">Interface Code</h3>
<pre class="eval"> [scriptable, uuid(7b3b3c62-9d53-4abc-bc89-c33ce78f439f)]
 interface nsIXMLHttpRequest : nsISupports
 {
   //attribtues
   readonly attribute nsIChannel channel;
   readonly attribute nsIDOMDocument responseXML;
   readonly attribute AString responseText;
   readonly attribute unsigned long status;
   readonly attribute AUTF8String statusText;
   readonly attribute long readyState;
   attribute boolean multipart;
   //methods
   void   abort();
   string getAllResponseHeaders();
   ACString getResponseHeader(in AUTF8String header);
   [noscript] void   openRequest(in AUTF8String method,
                                 in AUTF8String url,
                                 in boolean async,
                                 in AString user,
                                 in AString password);
   void   open(in AUTF8String method, in AUTF8String url);
   void   send(in nsIVariant body);
   void   overrideMimeType(in AUTF8String mimetype);
 };
</pre>
<h3 name="Attributes">Attributes</h3>
<h4 name="channel">channel</h4>
<pre class="eval"> readonly attribute nsIChannel channel;
</pre>
<p>The request uses a channel in order to perform the request.  This attribute represents the channel used for the request.  NULL if the channel has not yet been created.
</p><p>In a multipart request case, this is the initial channel, not the different parts in the multipart request.
</p><p>Mozilla only. Requires elevated privileges to access.
</p>
<h4 name="responseXML">responseXML</h4>
<pre class="eval"> readonly attribute nsIDOMDocument responseXML
</pre>
<p>The response to the request is parsed as if it were a text/xml stream. This attributes represents the response as a DOM Document object. NULL if the request is unsuccessful or has not yet been sent.
</p>
<h4 name="responseText">responseText</h4>
<pre class="eval"> readonly attribute AString responseText;
</pre>
<p>The response to the request as text. NULL if the request is unsuccessful or has not yet been sent.
</p>
<h4 name="status">status</h4>
<pre class="eval"> readonly attribute unsigned long status;
</pre>
<p>The status of the response to the request for HTTP requests.
</p>
<h4 name="statusText">statusText</h4>
<pre class="eval"> readonly attribute AUTF8String statusText;
</pre>
<p>The string representing the status of the response for HTTP requests.
</p>
<h4 name="readyState">readyState</h4>
<pre class="eval"> readonly attribute long readyState;
</pre>
<p>The state of the request.
Possible values:
</p>
<blockquote>
0 UNINITIALIZED open() has not been called yet.
1 LOADING       send() has not been called yet.
2 LOADED        send() has been called, headers and status are available.
3 INTERACTIVE   Downloading, responseText holds the partial data.
4 COMPLETED     Finished with all operations.</blockquote>
<h4 name="multipart">multipart</h4>
<pre class="eval"> attribute boolean multipart;
</pre>
<p>Set to true if the response is expected to be a stream of possibly multiple (XML) documents. If set to true, the content type of the initial response must be multipart/x-mixed-replace or an error will be triggerd. All requests must be asynchronous.
</p><p>This enables server push. For each XML document that's written to this request, a new XML DOM document is created and the onload handler is called inbetween documents. Note that when this is set, the onload handler and other event handlers are not reset after the first XML document is loaded, and the onload handler will be called as each part of the response is received.
</p>
<h3 name="Methods">Methods</h3>
Revert to this revision