其实写过jsonp相关api或者了解jsonp原理的同学其实都知道其实作为跨域的一种比较好的方式,其实还是有很多“缺陷”的。
比如:
- 无法使用POST进行提交
- 异常处理
其实当然很多人也了解过
script标签部分支持onerror事件
兼容性相关:
- IE9|10 FF Safari Chrome 支持
- IE6-8 Opera 不支持
关于
如何判断浏览器是否支持script的onerror,可以查看司徒正美的
http://www.cnblogs.com/rubylouvre/archive/2011/02/12/1952160.html
同样很多人和我一样会问,那我们想做到兼容基本所有浏览器的异常处理咋办呢?
-------- 先介绍一下从司徒那边看到的一个方案:
JSONP的
回调函数总是在script的onload事件(IE的onreadystatechange)之前就被调用,因此在回调执行之时,为script标签增加一个属性,然后等到onload发生的时候,检查有没有这个属性,来以此判定是否请求成功