问题一.当我们使用ajax跨域请求数据时,往往设置返回数据类型为jsonp格式,而由于服务器端返回的json数据格式不对,就会导致客户端提示‘json数据格式错误’。但我们看返回的json数据确实是标准的json格式,例如:{"name":jj,"address":"武汉"},这没毛病!
目前有两种解决方法。
1. 最初不是想跨域获取数据嘛,那在服务器响应的时候咱们给客户端获取资源的权限就行了。如下:
getResponse().setHeader("Access-Control-Allow-Origin", "*");此时客户端ajax请求数据就可以设为json格式了。
2. 如果我们有耐心仔细查看jQuery文档的话,会发现这样几句话:'如果获取的数据文件存放在远程服务器上(域名不同,也就是跨域获取数据),则需要使用jsonp类型。使用这种类型的话,会创建一个查询字符串参数 callback=? ,这个参数会加在请求的URL后面。服务器端应当在JSON数据前加上回调函数名,以便完成一个有效的JSONP请求。如果要指定回调函数的参数名来取代默认的callback,可以通过设置$.ajax()的jsonp参数'。就是说咱们想跨域获取数据的话可以使用jsonp类型,但服务器端返回的jason数据必须包含回调函数名,供客户端调用!具体如下:
之前返回的json数据:{"name":jj,"address":"武汉"}
更改后的json数据:jsonpCallback({"name":jj,"address":"武汉"})
客户端更改:
问题2.ajax请求成功后,页面居然自动刷新了!!!
这个不知道是不是jQuery的bug,或者是我没注意jQuery ajax的使用规范?经反复排查,最终发现使用原生的button标签,ajax请求成功后页面会自动刷新,而使用input标签封装的button就不会刷新页面。暂时记之。
