Django本地localhost访问无结果但127.0.0.1:8000可正常显示问题求助
问题根因
这是典型的浏览器同源策略拦截跨域请求导致的问题:
你在前端AJAX里把请求地址硬编码成了http://127.0.0.1:8000/api/,当你用localhost访问本地服务时,当前页面的源是http://localhost:8000,和AJAX请求的目标源http://127.0.0.1:8000属于不同源,请求会被浏览器直接拦截,无法拿到后端返回结果,自然功能异常。
当你直接用http://127.0.0.1:8000/访问页面时,页面源和请求源完全一致,符合同源要求,请求不会被拦截,所以功能正常。
修复方案
- 把AJAX中硬编码的绝对URL改成相对路径,不要写死IP和端口,直接填
/api/即可。改完之后不管你用localhost、127.0.0.1还是后续部署到线上域名,请求都会自动匹配当前访问的域名发送,从根源避免这类跨域问题。
修正后的AJAX基础配置:$.ajax({ url: "/api/", type: "POST", enctype: 'multipart/form-data', dataType: 'json', // 其余data等配置保持原有内容即可 }) - 修正你写反的回调逻辑:当前代码把成功、失败回调的逻辑完全写反了——
success是请求成功触发的回调,你在里面写了错误提示;error是请求失败触发的回调,你反而在里面写结果渲染逻辑,就算请求真的出错也会渲染异常结果,必须调整。
修正后的回调参考:success: function (res) { $('.loader').hide() $('#title').html("Result") let result = (res.responseText).split("-"); let disease = result[0]; let accuracy = result[1]; $('#disease').html("Result: " + disease) $('#graph').attr('src', '{% static "graph.png" %}') $('.result').show() }, error: function (xhr) { $('.loader').hide() alert("Error while processing") } - 只有后续前后端分离部署、确实需要跨域请求的时候,才需要安装
django-cors-headers扩展配置跨域允许规则,本地调试用相对路径是最简单稳妥的方案,不需要额外装依赖。
内容的提问来源于stack exchange,提问作者Malayanur Vithahavya 092
相关产品推荐
相关产品推荐

