1

我希望用户等待指定的时间(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();

问题是应用程序等待修复时间(超时参数根本不起作用)。

PS:使用 Titanium 为 android 制作应用程序。

4

3 回答 3

0

尝试使用这样的方法:

downloadDataReq.setTimeout(4000);
于 2012-04-11T11:54:35.477 回答
0

对我来说,HTTP 请求的超时不能正常工作。我有非常奇怪的问题,例如:

  • 如果我设置 1000 毫秒超时,它将在 2 或 3 秒后被调用。
  • 如果我设置 2000 毫秒或以上的超时时间,它将永远不会被调用。

我正在使用 Android ICS 和 JB,两者都遇到了上述问题。似乎超时参数是错误的。

作为一种解决方法,我正在 onload 内部进行检查(例如:如果我正在下载文件,我将本地文件的校验和与服务器上同一文件的校验和进行比较),并且我正在使用 JavaScript 模拟超时设置超时。它的工作范围很广。

下面的代码演示了如何使用 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)。

我仍在测试这个解决方案,但至少现在,它为我解决了一些错误。

于 2013-11-21T14:41:01.337 回答
-1

试试这个。

Ti.App.timeOut = 99000; //在app.js中声明

然后在您的项目中使用anyWhere。但是每次创建httpClient时都要确保。不要在代码中或整个页面中重新创建或重新定义。这对我来说很好。

//看看这个用法 var xhr = Titanium.Network.createHTTPClient({timeout:Ti.App.timeOut});

于 2012-06-08T10:15:57.050 回答