Jsonp跨域访问,返回代码为200却不执行success回调函数的问题。
当你遇到这个问题时,你应该已经对jsonp有所了解了,因此这里就不对jsonp的相关知识进行介绍,只针对标题描述的问题作出解释。
造成上述问题的原因如下2点(我所遇到情况)
1.返回的格式不符合jsonp的规则,从后台请求到的jsonp数据格式应该为
callBackName(+json+)
例如:callBackName({"name":"Hello world"})
其中callBackName为前端的回调函数名称,json就是你请求到的数据
2.如果已经按照上述规则返回数据,却还遇到相同问题。那就是应为json的字符串格式存在问题,比如json字符串中存在反斜杠。解决方法就是在spring-mvc.xml文件中配置responsebody返回json不带转移符号,具体被指如下。参考SpringMVC配置@Responsebody返回json不带转义字符
<!-- 配置返回json 不带转义字符-->
<context:annotation-config/>
<mvc:annotation-driven />
<bean id="mappingJacksonHttpMessageConverter"
class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter" />
<bean id="messageAdapter" class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="messageConverters">
<list>
<!-- Support JSON -->
<bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"/>
</list>
</property>
</bean>
<bean id="exceptionMessageAdapter" class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerExceptionResolver">
<property name="messageConverters">
<list>
<!-- Support JSON -->
<bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"/>
</list>
</property>
</bean>