使用suds.js库时如何设置超时

时间:2014-04-09 05:46:30

标签: titanium

我正在研究使用钛的SOAP webservices。我只是想为请求设置超时,所以如果数据不在规定的时间内,我可以显示正确的消息。现在我正在显示加载消息,因为没有超时它显示加载直到数据到来。

这是代码:

var soap_client = new soap({
endpoint : Alloy.Globals.url,
targetNamespace : 'xyz'
});

//调用网络服务

Alloy.Globals.callWebService = function(soap_action, post_data, callback) {

if (Titanium.Network.online) {

    Alloy.Globals.showIndicator();

    soap_client.invoke(soap_action, post_data, function(xmlDoc) {
        if (xmlDoc) {
            var xml = new XMLTools(xmlDoc);
            callback(xml);
        } else {
            Alloy.Globals.hideIndicator();
            Alloy.Globals.showAlert("No data found!");
        }
    });
} else {
    Alloy.Globals.showAlert("No internet connection!");
}
};

感谢任何帮助。 感谢。

2 个答案:

答案 0 :(得分:1)

将超时参数传递给soap构造函数应解决问题:

var soap_client = new soap({
    endpoint : Alloy.Globals.url,
    targetNamespace : 'xyz',
    timeout: 1000
});

您可以在source code on GitHub中查看可能参数的完整列表及其默认值:

// Client Configuration
var config = extend({
    endpoint:'http://localhost',
    targetNamespace: 'http://localhost',
    envelopeBegin: '<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:ns0="PLACEHOLDER" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">',
    headerBegin: '<soap:Header>',
    headerNode:'head',
    headerEnd: '</soap:Header>',
    bodyBegin:'<soap:Body>',
    envelopeEnd: '</soap:Body></soap:Envelope>',
    timeout: 5000, 
    responseType: 'object'
},_options);

在此模块中,soap客户端构建在XMLHttpRequest之上,因此您可以尝试创建ontimeout callback

xhr = soap_client.getXHR();
xhr.ontimeout = function() {
    console.log('Timeout');
}

作为旁注,使用XMLHttpRequest对象从Titanium app发出Http请求是非常不寻常的,我建议在Titanium.Network.HTTPClient之上寻找模块构建/创建自己的/ forking当前模块并用Titanium替换XMLHttpRequest .Network.HTTPClient。

答案 1 :(得分:0)

我建议不要使用外部setTimeout方法,但你应该编辑soap库并在该库代码中设置timeout属性。