我希望用户等待指定的时间(4秒)才能连接到服务器。如果在指定的时间段内无法连接,应该关闭应用程序。
这是我编码的内容:
var downloadDataReq = Titanium.Network.createHTTPClient({timeout :4000});
downloadDataReq.onload = function() { //some code }
downloadDataReq.onerror = function(event) { //some code }
var urlToDownloadData = 'http://www.google.com';
downloadDataReq.open("POST", urlToDownloadData);
downloadDataReq.send();
问题是app等待修复时间(超时参数根本不起作用)。
P.S。:使用Titanium为Android制作应用程序。
答案 0 :(得分:0)
尝试使用这样的方法:
downloadDataReq.setTimeout(4000);
答案 1 :(得分:0)
对我来说,HTTP请求的超时不能正常工作。我有非常奇怪的问题,例如:
我正在使用Android ICS和JB,而且我都遇到了上述问题。似乎超时参数是错误的。
作为一种解决方法,我正在onload中进行检查(例如:如果我正在下载文件,我将本地文件的校验和与服务器上相同文件的校验和进行比较),我正在模拟使用JavaScript的setTimeout超时。它正在发挥作用。
下面的代码演示了如何使用JS的setTimeout命令模拟请求超时:
var downloadDataReq = Titanium.Network.createHTTPClient();
downloadDataReq.onload = function() {
clearTimeout(timeout);
alert('loaded');
}
downloadDataReq.onerror = function(e) {
clearTimeout(timeout);
alert('error: ' + e.error);
}
var urlToDownloadData = 'http://10.1.1.183/maquina_local/arquivos/FirefoxPortable_12.0_PortugueseBR.paf.exe';
downloadDataReq.open("GET", urlToDownloadData);
var timeout = setTimeout(function(){
downloadDataReq.onload = function(){
downloadDataReq.onerror({'error': 'timeout'});
};
downloadDataReq.abort();
}, 4000);
downloadDataReq.send();
在超时时,我正在将onload事件更改为onerror,因为如果你尝试中止正在运行的请求,它将触发'onload'事件,而不是'onerror'。如果你不这样做,这个问题会给你损坏的文件(例如:一个20mb的文件,当请求被中止时,文件将不完整,大小小于20mb)。
我仍在测试这个解决方案,但至少现在,它为我解决了一些错误。
答案 2 :(得分:-1)
试试这个。
Ti.App.timeOut = 99000; //在app.js中声明
然后在项目中使用anyWhere。但是每次创建httpClient时都要确保。 不要在代码中或通过页面重新创建或重新定义。 这对我来说很好。
//看看这个用途 var xhr = Titanium.Network.createHTTPClient({timeout:Ti.App.timeOut});