如何在 Worklight 服务器适配器上执行 XMLHttpRequest?
Posted
技术标签:
【中文标题】如何在 Worklight 服务器适配器上执行 XMLHttpRequest?【英文标题】:How to perform a XMLHttpRequest on a Worklight Server Adapter? 【发布时间】:2014-06-05 21:33:07 【问题描述】:这是我的适配器代码
var fetchCommand = WL.Server.createSQLStatement("select * from basis_customers WHERE ID = ?");
function fetchData(param)
var xmlhttp = new XMLHttpRequest();
xmlhttp.open('POST', 'http://ectest556ws1:9081/teamworks/webservices/POCODM/MobilityWS.tws', true);
// build SOAP request
var sr = '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:mob="http://POCODM/MobilityWS.tws">'+
'<soapenv:Header/>'+
'<soapenv:Body>'+
'<mob:startProcess>'+
'<mob:nombre>1111</mob:nombre>'+
'<mob:cedula>2222</mob:cedula>'+
'</mob:startProcess>'+
'</soapenv:Body>'+
'</soapenv:Envelope>' ;
xmlhttp.onreadystatechange = function ()
if (xmlhttp.readyState == 4)
jq(xmlhttp.responseText).find("startProcessResponse").each(function ()
var el = jq(this);
alert(el.find("outputMessage").text());
);
;
// Send the POST request
xmlhttp.setRequestHeader('Content-Type', 'text/xml');
xmlhttp.send(sr);
return WL.Server.invokeSQLStatement(
preparedStatement : fetchCommand,
parameters : [param]
);
我的 SOAP WS 工作正常,但我不明白如何在我的 Worklight 适配器上调用 XMLHttpRequest
实例。但是当我调用它时,我得到了这个错误:
Procedure invocation error. Ecma Error: ReferenceError: "XMLHttpRequest" is not defined. (C%3A%5CUsers%5Csasahoo%5Cworkspace%5Cback%5Cadapters%5CPerson/Person-impl.js#33) worklight.js:4556
WL.Logger.__log worklight.js:4556
PUBLIC_API.(anonymous function) worklight.js:4643
onInvokeProcedureSuccess worklight.js:7112
window.WLJSX.Ajax.WLRequest.WLJSX.Class.create.onSuccess worklight.js:3225
window.WLJSX.Ajax.WLRequest.WLJSX.Class.create.onWlSuccess worklight.js:3197
(anonymous function) worklight.js:947
window.WLJSX.Ajax.Request.WLJSX.Class.create.respondToReadyState worklight.js:1156
window.WLJSX.Ajax.Request.WLJSX.Class.create.onStateChange worklight.js:1094
(anonymous function)
【问题讨论】:
【参考方案1】:您正尝试在 Worklight Adapater 环境中使用浏览器样式的代码,而您需要使用 WL.Server 功能。
您将需要两个适配器:一个 SQL 适配器和一个 HTTP 适配器。您可以从一个呼叫另一个
SQLAdapter ---> HttpAdapter ---SOAP Reuqest----> Your service
首先让 Http 适配器运行。创建一个 HTTP 适配器,在其 XML 文件中指定您的域和端口,即 ectest556ws1 和 9081。在适配器实现文件 .js 中,使用
var input =
method : 'get',
returnedContentType : 'xml',
path : "teamworks/webservices/POCODM/MobilityWS.tws",
;
return WL.Server.invokeHttp(input);
请注意,这是一个同步调用,您不使用回调方法。您可以使用 Studio 中的 invokeProcedure 功能对此进行测试。
然后在您的数据库适配器中,您可以调用 HTTP 适配器:
var invocationData =
adapter : "myHttpAdapter",
procedure : "myCallSoapMethod",
parameters : [ may, be, some, parameters ]
;
var soapResult = WL.Server.invokeProcedure(invocationData);
【讨论】:
以上是关于如何在 Worklight 服务器适配器上执行 XMLHttpRequest?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Worklight 6.2 中链接来自移动客户端的适配器调用?