Titanium:需要HTTP连接超时状态代码

时间:2013-02-25 11:22:04

标签: titanium-mobile appcelerator-mobile

我们是否有任何选项可以准确找出HTTP连接超时状态代码? HTTP连接timedout和错误的请求url BOTH给出响应代码0.有没有办法唯一地识别连接timedout?

 var self = Ti.UI.createWindow({
   backgroundColor : '#ffffff'
 });
 var url = 'https://www.google.com';
 if (Ti.Network.online) {
 var xhr = Ti.Network.createHTTPClient({
 timeout : 1000,
 validatesSecureCertificate : false
 });
 xhr.onload = function(e) {

 alert('onload:');
 };
 xhr.onerror = function(e) {
 alert('e.error:' + e.error + ':status:' + xhr.status);
 };
 xhr.open('GET', url);
 xhr.send(); }
 self.open();

以上代码在iphone的情况下将TimedOut状态代码设为0,而不是像408.但是在Android的情况下TimedOut没有发生。

1 个答案:

答案 0 :(得分:0)

在Android中,有两种情况需要考虑超时。观察到2种类型的错误,

在日志中 案例1:

  

TiHTTPClient:(TiHttpClient-9)[7700,93840] HTTP错误   (java.net.SocketTimeoutException):timeout [ERROR]:TiHTTPClient:   java.net.SocketTimeoutException:timeout

     

警告(' e.error:' + e.error +':状态:' + xhr.status);输出为

     

e.error:timeout:status:0 ...

案例2: TiHTTPClient:(TiHttpClient-14)[53148,203910] HTTP错误(java.net.SocketTimeoutException):SSL握手超时 [错误]:TiHTTPClient:java.net.SocketTimeoutException:SSL握手超时

  

警告(' e.error:' + e.error +':状态:' + xhr.status);输出为

     

e.error:SSL握手超时:状态:0

     

所以通过检查,

     

((e.error).toLowerCase()==" timeout" ||(e.error).toLowerCase()==   " sslhandshake超时"),

我们可以 捕获超时情况并相应地显示正确的消息。