不带XMLHttpRequest()对象的Ajax方法


Ajax Method without XMLHttpRequest() Object

我有一个关于Ajax方法论的查询。我习惯于使用ajax,就像我使用下面写的四行简单的代码一样:

$.ajax({
            type: "POST",
            url: "/application/group/addMembers",
            data: {memberIds: selectedMembers, groupId:<?php echo $this->groupId; ?>},
            success: (function(msg) {
              // alert(msg);
                var ans = JSON.parse(msg);
                alert(ans['message']); // msg is array returned from php script in json
            })
        });

现在,当我在不同的网站或教程上学习更多。他们通过创建XMLHTMLREQUEST()来实现ajax,XMLHTMLREQUEST用于和服务器交换信息。还有一些其他的东西,比如打开、发送函数。

但是我没有创建XMLHTMLREQUEST对象,我的ajax仍然可以正常工作。我只是想知道其中的区别。当我不使用XMLHTMLREQUEST对象与服务器通信时,我会失去什么吗。我确实查过了,但我仍然需要一个答案。

您的四个简单行和XMLHttpRequest()之间的区别在于语言本身,其中XMLHttpRequest)是纯的javascript,而上面的代码是jquery。实际上,您可以忽略这两者,并使用jQuery.get()&jQuery.load(),因为它们是更高级别的替代方案,更易于使用。不过,如果需要不太常见的选项,则可以更灵活地使用$.ajax()。

不同的浏览器实现AJAX的方式不同(实际上只有IE)。jQuery处理所有跨浏览器实现的差异,并在后台创建XHR对象。

来自jQuery源代码:

jQuery.ajaxSettings.xhr = function() {
    try {
        return new XMLHttpRequest();
    } catch( e ) {}
};
var xhrSupported = jQuery.ajaxSettings.xhr(),
    xhrSuccessStatus = {
        // file protocol always yields status code 0, assume 200
        0: 200,
        // Support: IE9
        // #1450: sometimes IE returns 1223 when it should be 204
        1223: 204
    },
    // Support: IE9
    // We need to keep track of outbound xhr and abort them manually
    // because IE is not smart enough to do it all by itself
    xhrId = 0,
    xhrCallbacks = {};
if ( window.ActiveXObject ) {
    jQuery( window ).on( "unload", function() {
        for( var key in xhrCallbacks ) {
            xhrCallbacks[ key ]();
        }
        xhrCallbacks = undefined;
    });
}
jQuery.support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported );
jQuery.support.ajax = xhrSupported = !!xhrSupported;