Msxml*.XMLHTTP vs. Microsoft.XMLHTTP

Discussion in 'Javascript' started by yawnmoth, Nov 7, 2006.

  1. yawnmoth

    yawnmoth Guest

    <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?
     
    yawnmoth, Nov 7, 2006
    #1
    1. Advertising

  2. yawnmoth wrote:
    > <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/archive/2006/10/23/using-the-right-version-of-msxml-in-internet-explorer.aspx>


    Regards


    Julian Turner
     
    Julian Turner, Nov 7, 2006
    #2
    1. Advertising

  3. 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
     
    Julian Turner, Nov 7, 2006
    #3
  4. yawnmoth

    VK Guest

    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
     
    VK, Nov 7, 2006
    #4
  5. 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/
     
    Martin Honnen, Nov 7, 2006
    #5
  6. yawnmoth

    VK Guest

    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.
     
    VK, Nov 7, 2006
    #6
  7. yawnmoth

    yawnmoth Guest

    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.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
     
    yawnmoth, Nov 7, 2006
    #7
  8. yawnmoth wrote:

    > 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/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/
     
    Martin Honnen, Nov 7, 2006
    #8
  9. yawnmoth

    yawnmoth Guest

    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.
     
    yawnmoth, Nov 7, 2006
    #9
  10. yawnmoth

    yawnmoth Guest

    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.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/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.
     
    yawnmoth, Nov 7, 2006
    #10
  11. yawnmoth

    VK Guest

    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) )
     
    VK, Nov 8, 2006
    #11
  12. yawnmoth

    Matt Kruse Guest

    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
     
    Matt Kruse, Nov 9, 2006
    #12
    1. Advertising

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

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Charles A. Lackman
    Replies:
    1
    Views:
    1,376
    smith
    Dec 8, 2004
  2. SpamProof
    Replies:
    0
    Views:
    584
    SpamProof
    Oct 21, 2003
  3. Raúl Martín
    Replies:
    1
    Views:
    10,838
    Natty Gur
    May 13, 2004
  4. =?Utf-8?B?VGltOjouLg==?=

    Microsoft.XMLHTTP ASP.NET

    =?Utf-8?B?VGltOjouLg==?=, May 3, 2005, in forum: ASP .Net
    Replies:
    3
    Views:
    16,682
    =?Utf-8?B?VGltOjouLg==?=
    May 3, 2005
  5. Martin Waller

    MSXML.XMLHTTP / ASP Page / Session

    Martin Waller, Oct 11, 2004, in forum: ASP General
    Replies:
    5
    Views:
    170
    CGOliver
    Mar 11, 2005
Loading...

Share This Page