【问题标题】:timeout parameter does not make any effect on Titanium.Network.createHTTPClienttimeout 参数对 Titanium.Network.createHTTPClient 没有任何影响
【发布时间】:2012-04-11 11:25:06
【问题描述】:

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

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

P.S.:使用 Titanium 为 android 制作应用程序。

【问题讨论】:

  • 下载DataReq.setTimeout(4000); ?
  • 好的,下载DataReq.setTimeout(4000); downloadDataReq.open("POST", urlToDownloadData);有效....我认为 Titanium.Network.HTTPClient 的构造函数中的超时参数存在一些问题...谢谢

标签: android titanium titanium-mobile titanium-modules


【解决方案1】:

尝试使用这样的方法:

downloadDataReq.setTimeout(4000);

【讨论】:

  • 正在下载DataReq.setTimeout(4000); downloadDataReq.open("POST", urlToDownloadData);有效....我认为 Titanium.Network.HTTPClient 的构造函数中的超时参数存在一些问题
【解决方案2】:

对我来说,HTTP 请求的超时无法正常工作。我遇到了非常奇怪的问题,例如:

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

我使用的是 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)。

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

【讨论】:

    【解决方案3】:

    试试这个。

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

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

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

    【讨论】:

    • 我不赞成你认为超时太大了。另外,如果你想要不同的超时时间(即一个用于检查用户输入,另一个用于一些长途批处理任务)怎么办?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-17
    • 1970-01-01
    • 2020-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-01
    相关资源
    最近更新 更多