JQuery的$.post,$.get都是有个bug(转)

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

 

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

Js代码
  1. $.post('json.php', {n:1}, function(data){  
  2.     alert(typeof data);  
  3.     alert(data.value);  
  4. }, 'json');  
$.post('json.php', {n:1}, function(data){
 alert(typeof data);
 alert(data.value);
}, 'json');

 

如果没有参数:

Js代码
  1. $.post('json.php'function(data){  
  2.     alert(typeof data);  
  3.     alert(data.value);  
  4. }, 'json');  
$.post('json.php', function(data){
 alert(typeof data);
 alert(data.value);
}, 'json');

 

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

jQuery的$.post实现:

Js代码
  1. post: function( url, data, callback, type ) {  
  2.     if ( jQuery.isFunction( data ) ) {  
  3.         callback = data;  
  4.         data = {};  
  5.     }  
  6.   
  7.     return jQuery.ajax({  
  8.         type: "POST",  
  9.         url: url,  
  10.         data: data,  
  11.         success: callback,  
  12.         dataType: type  
  13.     });  
  14. },  
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解析。

 

posted @ 2009-11-13 09:12  火凤凰工作室  阅读(512)  评论(0编辑  收藏  举报