2

我对 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 对象,我的 ajax 仍然可以正常工作。我只是想知道区别。当我不使用 XMLHTMLREQUEST 对象与服务器通信时,我会丢失一些东西吗?我确实搜索过它。但我仍然需要一个答案。

4

2 回答 2

1

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

于 2013-09-03T22:39:24.543 回答
0

不同的浏览器实现 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;
于 2013-09-03T20:35:17.350 回答