jQuery的方法没有参数的话就不要传入参数,即便是null也不要传入

晒美胸这个站点用到了一个无限加载的jQuery插件jquery.infinitescroll.js,其中这个插件使用了jQuery的.load()方法。

忘记1.7.2版本的jQuery文档中是说如何使用.load方法的,但是在jquery.infinitescroll.js中是这样使用的:

box.load(desturl + ' ' + opts.itemSelector, null, function infscr_ajax_callback(responseText) {

instance._loadcallback(box, responseText);

});

代码位置截图如下:

这样,本来应该是jQuery文档中「data」的参数jquery.infinitescroll.js传入了一个null。估计作者的意思null也是表示没有参数,这种方式实际证明在jQuery 1.7.2版本时候工作的很正常,因为jQuery 1.7.2中判断此参数是否存在的代码是这样子的:

if ( params ) {

// If it's a function

if ( jQuery.isFunction( params ) ) {

// We assume that it's the callback

callback = params;

params = undefined;

// Otherwise, build a param string

} else if ( typeof params === "object" ) {

params = jQuery.param( params, jQuery.ajaxSettings.traditional );

type = "POST";

}

}

代码位置如下图:

但是在最新版的jQuery 1.8.0中这一段代码判断「data」是否为空时候用的这种方式:

// If it's a function

if ( jQuery.isFunction( params ) ) {

// We assume that it's the callback

callback = params;

params = undefined;

// Otherwise, build a param string

} else if ( typeof params === "object" ) {

type = "POST";

}

代码位置如下图:

这时候在jQuery 1.8.0版本时候传入参数为null的时候,就会触发typeof params === "object"这一行代码。而此时传入给ajax方法的type就会变成POST,而不是我们所期望的GET。对于一般的应用来说可能影响不大或者并没有什么影响,但是对于我的站点来说GET和POST是分开处理的……这个时候无论如何都是返回不了正确的内容了……

添加新评论 »