ajax无法执行success回调的原因分析

1.现象

在项目中WEB前端使用了ajax方式访问服务端的数据,一直访问的好好的代码,却突然不能执行success回调了,却执行了error回调,在确认了url是正常的,并直接在浏览器里访问url,也返回了正确的JSON数据的情况下,请教了高手帮我解决这个问题。


	CreateLogMapFromTmpl = function(tmplId)
	{
		url = "/service/welllogtmpl/" + tmplId;
		$.ajax({
			type:'GET',
			url:url,
			cache:false,
			success:function(msg){  
				result = JSON.parse(msg);
				if(result.code == "200")
				{
					alert(result.response);
					
				}
			},
			error: function(e) { 
				alert(e); 
				
				} 
		});
		
	}


 

2.原因分析

在使用ajax访问数据的时候,浏览器会对返回值进行判断,其判断的依据就是请求头的ContentType,于是查看了服务端,有如下代码

response.setContentType("text/javascript; charset=UTF-8");

也就是说服务端把返回内容指定成了javascript,那么浏览器就根据服务端指定的ContentType对页面返回信息进行判断,当然会认为返回了错误的信息,因为返回的内容是JSON,肯定不符合JavaScript的语法,于是就执行了error回调。


3.解决方案

经过分析,找到了原因,那么解决起来当然很容易了,只需要把服务端指定ContentType的代码去掉就行了,其默认类型是 text/plain ,就是告诉浏览器,返回的内容是普通的文本,就不用检查啦!!!

于是这个小小的问题就解决了。


4.如何直接返回JSON对象

很显然在客户端要使用JSON.parse来解析返回的普通文本,也是一项开销,那么有没有办法让浏览器直接返回JSON对象呢?答案是肯定的。

只需要在服务端指定ContentType为json就行了,代码如下:

response.setContentType("text/json; charset=UTF-8");

在客户端就不用再解析了,可以直接得到JSON对象,代码如下:

	CreateLogMapFromTmpl = function(tmplId)
	{
		url = "/service/welllogtmpl/" + tmplId;
		$.ajax({
			type:'GET',
			url:url,
			cache:false,
			success:function(result){  
				//result = JSON.parse(msg);
				if(result.code == "200")
				{
					alert(result.response);
					
				}
			},
			error: function(e) { 
				alert(e); 
				
				} 
		});
		
	}

5.其他问题

在解决这个问题过程中,还发现了另一个文章,其问题主要是jquery版本对JSON的格式严格限制程度不一样造成的,但现象和本文中提到的现象一样。

详细内容可以打开以下链接:

http://www.jb51.net/article/32540.htm

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值