Mac*_*bey 6 javascript jsonp http-status-codes
我正在实现一个依赖于JavaScript客户端和服务器之间通信的应用程序,该服务器知道如何使用JSONP表示法响应客户端.
我试图在我的Javascript客户端中处理这种情况,我的服务器返回的http状态代码为4xx或5xx.目前我所看到的是脚本没有被评估,因为浏览器认为它是一个错误(它是.)但是,我仍然想要阅读我的服务器在4xx或5xx响应的情况下要说的内容我的JavaScript客户端中的代码.
我发现这确实引起了脚本标记元素的错误,但我担心这不是跨浏览器,也不会是一个强大的解决方案.
即使http状态代码是4xx或5xx,有没有人在解析jsonp响应方面有任何运气?
我开始相信我应该使用这个"设置超时"解决方案,通过声明jsonp请求的回调函数将在某个时间范围内完成来"检测"失败,如果没有,则有一个错误.
编辑:当我的服务器检测到jsonp客户端然后在返回的json对象中隧道传送错误消息/状态时,我暂时总是返回200状态代码.我希望利用HTTP状态代码,但我认为javscript客户端是不行的.
JSONP是解决跨域问题的黑客攻击.当它工作时,它运作良好.但是当它没有时,你没有办法弄清楚出了什么问题.
setTimeout是原始版本之上的另一个hack.如果你必须使用JSONP并仍然需要错误检测(不处理),这就是你必须要做的.没有更好的解决方案.
如果您控制服务器,请尝试使用Cross-Origin-Resource-Sharing(CORS)或Flash的crossdomain.xml等替代方案来允许跨域请求.如果您不控制服务器,则可以通过服务器代理响应以获得更好的控制.
使用JSONP时的一种方法是在回调中嵌入状态信息.所以回调函数签名看起来像
callback(result, status, message)
Run Code Online (Sandbox Code Playgroud)
所以如果你的电话看起来像
http://myurl.com/?callback=fn
Run Code Online (Sandbox Code Playgroud)
为成功调用生成代码
fn({"data":"my great data"}, 200)
Run Code Online (Sandbox Code Playgroud)
并为一个特殊的条件
fn(null, 500, "server error"}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6141 次 |
| 最近记录: |