我有一个关于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;