当存在4xx或5xx Http错误代码时,使用Javascript解析JSONP响应

|| 我正在实现一个依赖JavaScript客户端与服务器之间通信的应用程序,该服务器知道如何使用JSONP表示法响应客户端。 我正在尝试在Javascript客户端中处理服务器返回的HTTP状态代码为4xx或5xx的情况。目前,我看到的是该脚本未得到评估,因为浏览器认为它是错误(确实如此)。但是,我仍然想阅读服务器在4xx或5xx情况下必须说的内容我的JavaScript客户端中的响应代码。 我看到这确实会在script标签元素上引发错误,但是我担心这不是跨浏览器,也不是一个可靠的解决方案。 即使http状态代码为4xx或5xx,有人仍然可以解析JSONp响应吗? 我开始相信我应该使用此“设置超时”解决方案,该解决方案通过声明对jsonp请求的回调函数来“检测到”失败,并且会在特定时间范围内完成,不,有一个错误。 编辑:当我的服务器检测到jsonp客户端时,我总是临时返回200状态代码,然后在返回的json对象中建立错误消息/状态的通道。我希望利用HTTP状态代码,但我认为对于javscript客户端这是行不通的。     
已邀请:
使用JSONP的一种方法是在回调中嵌入状态信息。所以回调函数签名看起来像
callback(result, status, message)
因此,如果您的通话看起来像
http://myurl.com/?callback=fn
为成功的调用生成代码,如下所示
fn({\"data\":\"my great data\"}, 200)
并有特殊情况
fn(null, 500, \"server error\"}
    
JSONP是解决跨域问题的一种工具。当它起作用时,它会很好地工作。但是,如果没有,您就没有办法找出问题所在。 setTimeout是原始版本之上的另一种hack。如果您必须使用JSONP并且仍然需要错误检测(不进行处理),那就是您要做的。没有更好的解决方案。 如果您控制服务器,请尝试使用跨域资源共享(CORS)或Flash \的crossdomain.xml之类的替代方法来允许跨域请求。如果您不控制服务器,则可以通过服务器代理响应以获得更好的控制。     
您可以检查XHR对象的“ 4”(如果您没有使用JS库)。
if(xhr.readyState == 4){
  if(xhr.status == 200){
    // good
  }else if(xhr.status == 502){
    // d\'oh
  }
}
如果您使用的是jQuery,则可以传入$ 6来处理$ .ajax的特殊情况     

要回复问题请先登录注册