业务逻辑是这样:
前台:在进入页面后发起一个ajax请求
后台(nodejs):一个返回html页面的get,一个返回ajax的get
注意:我的html里面有个div的background-image路径错误
结果:ajax404,后台报错:Can't set headers after they are sent
尝试办法1:加上return,不能解决。
查看控制台,图片404总是在ajax404的后面执行,分析原因是不是图片404造成的nodejs二次setHeader(get Html页面后 开始执行ajax【注意这里并不是window.onload后执行】,然后这时请求背景图片,因为ajax是异步,so先给图片setHeader然后给ajax setHeader,造成二次setHeader);
尝试办法2:注释含背景图片的div,插入一个含有错误src的img标签,结果ajax200。
分析原因:
然后是img的src与其他标签的background-image的url的请求顺序:
浏览器先请求src再请求url(我自己的测试,不知道是否是这样)
所以src的请求不会影响ajax(??为什么没有影响,还是不太明白??)
尝试办法3:ajax执行在window.onload后,ajax200
分析原因:
先mark一个常识:
$(document).ready(function(){})等于$(function(){});
window.onload必须等到页面内包括图片的所有元素加载完毕后才能执行。
$(document).ready()是DOM结构绘制完毕后就执行,不必等到加载完毕。
这样背景图的请求不会影响ajax
——————————————————————————————————————————————————
以上是碰到的问题和自己的分析,虽然没有完全搞懂!
上面的问题也有可能是nodejs的express框架造成的,因为如果其他语言的后台程序也存在这个问题,那只要页面有错误url的背景元素,就会影响ajax的请求,这不太可能。
希望有看到这篇日记的大神能帮我解决困惑