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

前端之家收集整理的这篇文章主要介绍了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',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

原文链接:https://www.f2er.com/ajax/164375.html

猜你在找的Ajax相关文章