469,293 Members | 1,364 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 469,293 developers. It's quick & easy.

Msxml*.XMLHTTP vs. Microsoft.XMLHTTP

<http://www.quirksmode.org/book/printable/xmlhttp.txtshows 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.htmlopt 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?

Nov 7 '06 #1
13 22737

yawnmoth wrote:
<http://www.quirksmode.org/book/printable/xmlhttp.txtshows 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.htmlopt 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/archive/2006/10/23/using-the-right-version-of-msxml-in-internet-explorer.aspx>
Regards
Julian Turner

Nov 7 '06 #2

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/archive/2006/10/23/using-the-right-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

Nov 7 '06 #3
VK

Julian Turner wrote:
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

Nov 7 '06 #4
VK wrote:
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/default.asp?url=/library/en-us/xmlsdk/html/e5533515-e525-4781-b68b-1ecfefdd1e89.asp>
for the MSXML 3 program ids and
<http://msdn.microsoft.com/library/default.asp?url=/library/en-us/xmlsdk/html/5016cf75-4358-4c1f-912e-c071aa0a0991.asp>
for the introduction to that section.
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.
--

Martin Honnen
http://JavaScript.FAQTs.com/
Nov 7 '06 #5
VK
Martin Honnen wrote:
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.

Nov 7 '06 #6

Martin Honnen wrote:
<snip>
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.txtis 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

Nov 7 '06 #7
yawnmoth wrote:
If there's no Msxml3.XMLHTTP program id, I assume that means that
<http://www.quirksmode.org/book/printable/xmlhttp.txtis 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/default.asp?url=/library/en-us/xmlsdk/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).


--

Martin Honnen
http://JavaScript.FAQTs.com/
Nov 7 '06 #8
>
>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/default.asp?url=/library/en-us/xmlsdk/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).

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);}
}
}

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

Thanks and Best Regards,
Joe
Nov 7 '06 #9

Joe D Williams wrote:
<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.

Nov 7 '06 #10

Martin Honnen wrote:
yawnmoth wrote:
If there's no Msxml3.XMLHTTP program id, I assume that means that
<http://www.quirksmode.org/book/printable/xmlhttp.txtis 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/default.asp?url=/library/en-us/xmlsdk/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/en-us/xmlsdk/html/e5533515-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.

Nov 7 '06 #11
VK

Joe D Williams wrote:
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) )

Nov 8 '06 #12

"yawnmoth" <te*******@yahoo.comwrote in message
news:11**********************@f16g2000cwb.googlegr oups.com...
>
Joe D Williams wrote:
><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.
Thanks, i think I agree. Since IE7 will work with just window.XMLHttpRequest
I'm guessing it uses the latest available.
Thanks,
Joe

Nov 9 '06 #13
Joe D Williams wrote:
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;
}
};
--
Matt Kruse
http://www.JavascriptToolbox.com
http://www.AjaxToolbox.com
Nov 9 '06 #14

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

12 posts views Thread by Botan Guner | last post: by
1 post views Thread by Ike | last post: by
14 posts views Thread by =?Utf-8?B?VmFuZXNzYQ==?= | last post: by
1 post views Thread by CARIGAR | last post: by
reply views Thread by zhoujie | last post: by
reply views Thread by suresh191 | last post: by
1 post views Thread by Geralt96 | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.