Msxml*.XMLHTTP vs. Microsoft.XMLHTTP

Y

yawnmoth

<http://www.quirksmode.org/book/printable/xmlhttp.txt> shows two
alternatives to Microsoft.XMLHTTP - Msxml2.XMLHTTP and Msxml3.XMLHTTP.
If my understanding is correct, the different numbers refer to the
version of Microsoft's XML parser and that Microsoft.XMLHTTP refers to
the latest installed version.

This makes me wonder why sites like
<http://developer.apple.com/internet/webcontent/xmlhttpreq.html> opt to
use Msxml2.XMLHTTP, first, and then use Microsoft.XMLHTTP as a
fallback. If v2 was the latest version of the XML parser,
Microsoft.XMLHTTP would refer to it just as Msxml2.XMLHTTP does. If v3
or v4 were the latest versions, Microsoft.XMLHTTP would refer to either
of those. So why give v2 preference? Wouldn't it be better to use v4
and then v3, before using v2? Wouldn't it be better just to reference
Microsoft.XMLHTTP and not Msxml*.XMLHTTP?
 
J

Julian Turner

yawnmoth said:
<http://www.quirksmode.org/book/printable/xmlhttp.txt> shows two
alternatives to Microsoft.XMLHTTP - Msxml2.XMLHTTP and Msxml3.XMLHTTP.
If my understanding is correct, the different numbers refer to the
version of Microsoft's XML parser and that Microsoft.XMLHTTP refers to
the latest installed version.

This makes me wonder why sites like
<http://developer.apple.com/internet/webcontent/xmlhttpreq.html> opt to
use Msxml2.XMLHTTP, first, and then use Microsoft.XMLHTTP as a
fallback. If v2 was the latest version of the XML parser,
Microsoft.XMLHTTP would refer to it just as Msxml2.XMLHTTP does. If v3
or v4 were the latest versions, Microsoft.XMLHTTP would refer to either
of those. So why give v2 preference? Wouldn't it be better to use v4
and then v3, before using v2? Wouldn't it be better just to reference
Microsoft.XMLHTTP and not Msxml*.XMLHTTP?

Hi

I don't know what the correct answer to this is, but you should have a
look at tbe MS XML Web Log as to the recommended ProgIDs at the moment.

<URL:http://blogs.msdn.com/xmlteam/archi...ht-version-of-msxml-in-internet-explorer.aspx>


Regards


Julian Turner
 
J

Julian Turner

Julian Turner wrote:
[snip]
I don't know what the correct answer to this is, but you should have a
look at tbe MS XML Web Log as to the recommended ProgIDs at the moment.

<URL:http://blogs.msdn.com/xmlteam/archi...ht-version-of-msxml-in-internet-explorer.aspx>


See the following quote at the end of the above entry:-

"MSXML2 vs. Microsoft namespace - I've also seen a lot of code that
instantiates the "Microsoft.XMLHTTP" ActiveX object rather than the
MSXML2.XMLHTTP.3.0 or MSXML2.XMLHTTP.6.0 if you're using 6.0. The
"Microsoft" namespace is actually older and is only implemented in
MSXML3 for legacy support. It's unfortunate we used the "better"
name on the older version, but stick to the "msxml2" namespace when
instantiating objects."

Seems to suggest that using Microsoft.XMLHTTP is actually out of date.

Regards

Julian
 
V

VK

Julian said:
Seems to suggest that using Microsoft.XMLHTTP is actually out of date.

Right: that is for the very first implementations of IXMLHTTPRequest so
should be used (if even used) as the last option.

For modern implementations it is Msxml library activated by
Msxml2.XMLHTTP or Msxml3.XMLHTTP etc.

As it can be very problematic to detect the current version of the
library (2?, 3?,..., 6?) Microsoft made "Msxml2.XMLHTTP" to be the
universal alias *for the current library on the given client* This way
you can use new ActiveXObject('Msxml2.XMLHTTP') and do not worry that
the current livrary version is say Msxml4
 
M

Martin Honnen

VK said:
For modern implementations it is Msxml library activated by
Msxml2.XMLHTTP or Msxml3.XMLHTTP etc.

There is no program id 'Msxml3.XMLHTTP'. If you want to use the client
side XMLHTTP component of MSXML 3 then the program id is
'Msxml2.XMLHTTP.3.0'. For MSXML 4 it is 'Msxml2.XMLHTTP.4.0', for MSXML
5 it is 'Msxml2.XMLHTTP.5.0', and for MSXML 6 it is 'Msxml2.XMLHTTP.6.0'.
See
<http://msdn.microsoft.com/library/d...html/e5533515-e525-4781-b68b-1ecfefdd1e89.asp>
for the MSXML 3 program ids and
As it can be very problematic to detect the current version of the
library (2?, 3?,..., 6?) Microsoft made "Msxml2.XMLHTTP" to be the
universal alias *for the current library on the given client* This way
you can use new ActiveXObject('Msxml2.XMLHTTP') and do not worry that
the current livrary version is say Msxml4

That is not true, MSXML 4 and later components can only be instantiated
with version specific program ids e.g. 'Msxml2.XMLHTTP.4.0'.
To quote from above URL:
"After you install MSXML 4.0 or later, applications that use
version-independent ProgIDs continue to run using the most recent
version of MSXML prior to version 4.0. Typically, for most current
Windows systems, this will be MSXML 3.0"

So the version independent version id 'Msxml2.XMLHTTP' is bound to MSXML
3 or earlier but never to later versions (MSXML 4 or later) even if
these are installed.
 
V

VK

Martin said:
That is not true, MSXML 4 and later components can only be instantiated
with version specific program ids e.g. 'Msxml2.XMLHTTP.4.0'.
To quote from above URL:
"After you install MSXML 4.0 or later, applications that use
version-independent ProgIDs continue to run using the most recent
version of MSXML prior to version 4.0. Typically, for most current
Windows systems, this will be MSXML 3.0"

So the version independent version id 'Msxml2.XMLHTTP' is bound to MSXML
3 or earlier but never to later versions (MSXML 4 or later) even if
these are installed.

Right, sorry and thanks for the correction. If it is necessary to use
Microsoft XML Core Services ver.4 or above (say for specific XSLT
transformations client-side) it is necessary to use the correct ProgID.

If it is a regular ajaxoid used just to grab data / send data to the
server than the version is not important and ProgID 'Msxml2.XMLHTTP'
covers it all.
 
Y

yawnmoth

Martin Honnen wrote:
There is no program id 'Msxml3.XMLHTTP'. If you want to use the client
side XMLHTTP component of MSXML 3 then the program id is
'Msxml2.XMLHTTP.3.0'. For MSXML 4 it is 'Msxml2.XMLHTTP.4.0', for MSXML
5 it is 'Msxml2.XMLHTTP.5.0', and for MSXML 6 it is 'Msxml2.XMLHTTP.6.0'.
If there's no Msxml3.XMLHTTP program id, I assume that means that
<http://www.quirksmode.org/book/printable/xmlhttp.txt> is in error when
it references it?

Also, I assume the program id for the client side XMLHTTP component of
MSXML 1 is Microsoft.XMLHTTP?
That is not true, MSXML 4 and later components can only be instantiated
with version specific program ids e.g. 'Msxml2.XMLHTTP.4.0'.
To quote from above URL:
"After you install MSXML 4.0 or later, applications that use
version-independent ProgIDs continue to run using the most recent
version of MSXML prior to version 4.0. Typically, for most current
Windows systems, this will be MSXML 3.0"

So the version independent version id 'Msxml2.XMLHTTP' is bound to MSXML
3 or earlier but never to later versions (MSXML 4 or later) even if
these are installed.
Does Msxml2.XMLHTTP bind itself to MSXML 1, as well?

If so, what's the point of referencing Microsoft.XMLHTTP at all?
Shouldn't Msxml2.XMLHTTP always exist when Microsoft.XMLHTTP does?

If not, then would it be more accurate to say that Msxml2.XMLHTTP is
bound to MSXML 2 and 3?

Finally, if one wanted to use the latest version of MSXML (even though
it might not be necessary), I assume the program id's ought to be
checked in this order?:

Msxml2.XMLHTTP.6.0
Msxml2.XMLHTTP.5.0
Msxml2.XMLHTTP.4.0
Msxml2.XMLHTTP
(assuming Msxml2.XMLHTTP is not bound to MSXML 1) Microsoft.XMLHTTP
 
M

Martin Honnen

yawnmoth said:
If there's no Msxml3.XMLHTTP program id, I assume that means that
<http://www.quirksmode.org/book/printable/xmlhttp.txt> is in error when
it references it?

It does not help having that in there as that program id does not exist
but as the code that uses it has try/catch the script will not give an
error but rather go on and create a different component.

what's the point of referencing Microsoft.XMLHTTP at all?

Original IE 5 and IE 5.5 installation have MSXML versions that support
that program id but not the program id Msxml2.XMLHTTP.

For all the details I have already pointed to
<http://msdn.microsoft.com/library/d...html/5016cf75-4358-4c1f-912e-c071aa0a0991.asp>
then there was already a link posted to a recent blog entry of the MS
XML team on what they want to be used currently.
Finally this knowledge base entry
<http://support.microsoft.com/kb/269238/en-us>
lists the different versions and which versions are or were included
with which other products (e.g. IE versions).
 
Y

yawnmoth

Joe said:
<snip>
So from what I can see, this should cover reasonable possiblilities?

// create XMLHttpRequest request
function createXMLHttpRequest()
{
if ( window.XMLHttpRequest ) // IE7 and all of interest
{
try { return new window.XMLHttpRequest(); }
catch(e) {alert("window.XMLHttpRequest failed"+e.message);}
}
else // old IE
{
try { return new ActiveXObject("Microsoft.XMLHTTP"); }
catch (e) {}
try { return new ActiveXObject("Msxml2.XMLHTTP"); }
catch (e) {alert("Platform not supported"+e.message);}
}
}

Per this discussion, it seems that it'd be better to use
Microsoft.XMLHTTP only if Msxml2.XMLHTTP is unavailable (you're doing
it in the other direction), since Microsoft.XMLHTTP refers to an older
version of Microsoft's XML Core Services then is Msxml2.
 
Y

yawnmoth

Martin said:
It does not help having that in there as that program id does not exist
but as the code that uses it has try/catch the script will not give an
error but rather go on and create a different component.



Original IE 5 and IE 5.5 installation have MSXML versions that support
that program id but not the program id Msxml2.XMLHTTP.

For all the details I have already pointed to
<http://msdn.microsoft.com/library/d...html/5016cf75-4358-4c1f-912e-c071aa0a0991.asp>

No page on that URL seems to discuss Microsoft.XMLHTTP request very
much.

<http://msdn.microsoft.com/library/e...15-e525-4781-b68b-1ecfefdd1e89.asp?frame=true>
suggests that Microsoft.XMLHTTP is bound MSXML 2. It makes no mention
of whether or not Msxml2.XMLHTTP is also bound to MSXML 2 (which would
mean that two things would be bound to it), let alone whether or not
it's bound to MSXML 1.

<http://msdn.microsoft.com/library/en-us/xmlsdk/html/5016cf75-4358-4c1f-912e-c071aa0a0991.asp>
suggests that MSXML 3 was the last one that had a version-independent
ProgID but doesn't state what the first version of MSXML to support a
version-independant ProgID was.
 
V

VK

Joe said:
The only 'problem' being that the window.XMLHttpRequest
seems to work slightlly diferent in IE7 than others by not
allowing local rurl.

IXMLHTTPRequand (Microsoft) does work just fine with local files -
where allowed by the security environment, of course; but for them the
status code is reported 0 and not 200. This way the regular "Web check"
if (req.status == 200)
fails. To make an ajaxoid able to work with Web requests and with local
files the check has to be:
if ( (req.status == 200) || (req.status == 0) )
 
M

Matt Kruse

Joe said:
So from what I can see, this should cover reasonable possiblilities?
// create XMLHttpRequest request
function createXMLHttpRequest()
...

I use this, which seems a little more robust:

/**
* Returns an XMLHttpRequest object, either as a core object or an ActiveX
* implementation. If an object cannot be instantiated, it will return null;
* @returns {Object} An XMLHttpRequest object
*/
AjaxRequest.getXmlHttpRequest = function() {
if (window.XMLHttpRequest) {
return new XMLHttpRequest();
}
else if (window.ActiveXObject) {
// Based on http://jibbering.com/2002/4/httprequest.html
/*@cc_on @*/
/*@if (@_jscript_version >= 5)
try {
return new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
return new ActiveXObject("Microsoft.XMLHTTP");
} catch (E) {
return null;
}
}
@end @*/
}
else {
return null;
}
};
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,755
Messages
2,569,536
Members
45,009
Latest member
GidgetGamb

Latest Threads

Top