论坛首页 Web前端技术论坛

jQuery的$.post方法的一个bug

浏览 8872 次
精华帖 (0) :: 良好帖 (1) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-11-25  


jQuery的$.post,$.get都是有个bug的,之前在看jQuery源码关于AJAX处理这一部分的时候就发现了,没想到今天在实际应用的时候又遇上了。

 

其实问题很简单,记录一下。$.post现在支持了第3个参数,即返回数据的类型,如果server在返回json数据,那么一种简单的做法:

$.post('json.php', {n:1}, function(data){
	alert(typeof data);
	alert(data.value);
}, 'json');

 

如果没有参数:

$.post('json.php', function(data){
	alert(typeof data);
	alert(data.value);
}, 'json');

 

这两种的结果是不一样的! 前者的data已经被处理为js对象,而后者的data仍然是json字符串,原因:

jQuery的$.post实现:

post: function( url, data, callback, type ) {
	if ( jQuery.isFunction( data ) ) {
		callback = data;
		data = {};
	}

	return jQuery.ajax({
		type: "POST",
		url: url,
		data: data,
		success: callback,
		dataType: type
	});
},

 可以看到,在没有data参数的时候,存在一个bug,type被忽略了,调用ajax方法时传递的dataType是undefined,这样type按默认的html处理,并没有被按json解析。

 

   发表时间:2008-11-26  
不传参数的话,还是使用$.getJSON  好。
不过楼主说得这个是有点特殊。 因为涉及到第四个参数 type
0 请登录后投票
   发表时间:2008-11-26  
这。。这算bug么,没有参数的话也要占个位吧
0 请登录后投票
   发表时间:2008-11-27  
是bug,既然已经考虑了 if ( jQuery.isFunction( data ) ) {  ,那应该callback = data; 前面加个 type = callback 。
0 请登录后投票
论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics