我正在研究使用钛的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!");
}
};
感谢任何帮助。 感谢。
答案 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属性。