ajax 跨域取 json 常常会遇到失败的情况。因为浏览器的同源策略,不允许从一个域名的网页向另一个域名的资源发起请求,除非该域名在响应头中允许跨域。比如:@H_404_1@
Access-Control-Allow-Origin: *
如果跨域请求的资源没有在响应头中设置 Access-Control-Allow-Origin,那么就会抛出错误。@H_404_1@
除此之外,还有其他一些可能导致 ajax 跨域取 json 失败的原因。@H_404_1@
1. JSON 数据格式问题@H_404_1@
$.ajax({ url: 'http://example.com',dataType: 'jsonp',success: function(data){ console.log(data); } })
如果 JSON 数据格式不正确,会导致解析失败。比如 JSON 数据中包含注释,会导致解析失败。@H_404_1@
2. 请求超时问题@H_404_1@
$.ajax({ url: 'http://example.com',timeout: 5000,// 设置请求超时时间,默认为 0,即永不超时 success: function(data){ console.log(data); },error: function(xhr,statusText,e){ console.log(e); } })
如果服务器响应时间过长,会导致请求超时。@H_404_1@
跨域请求不支持 cookie,所以如果需要在跨域请求中携带 cookie,需要在请求中设置 withCredentials: true
。@H_404_1@
$.ajax({ url: 'http://example.com',xhrFields: { withCredentials: true // 是否携带 cookie },success: function(data){ console.log(data); },e){ console.log(e); } })
如果服务器不支持跨域请求携带 cookie,设置 withCredentials: true
也会导致跨域请求失败。@H_404_1@
以上就是 ajax 跨域取 json 失败的几个常见原因。解决方法也相应不同,具体需要根据具体情况来处理。@H_404_1@
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。