使用Ext.Ajax.request调用需要WS-Reliable Messaging的跨域web服务



我们目前有一个javascript客户端使用类似以下代码成功访问另一个域上的web服务:

var postXml = "" +
    "<aaa:getSomething>" +
        "<param1>" + obj.param1 + "</param1>" +
        "<param2>" + obj.param2 + "</param2>" +
    "</aaa:getSomething>";
    var data = this.createEnvelope(postXml);
    var request = Ext.Ajax.request({
        url : this.webServiceUrl,
        method : "POST",
        callback : this.onGetSomething,
        obj : obj,
        scope : this,
        headers : {
            SOAPAction: "urn:onGetSomething"
        },
        xmlData : data
    });

我们被要求将WS-ReliableMessaging添加到我们的web服务中。有没有办法修改我们的javascript客户端以连接到新的启用WS-ReliableMessaging的服务?我不是很懂Javascript,但从我目前的研究来看,我怀疑唯一的方法可能是向本地服务器端代理JSP发出Ajax请求,该JSP从Java进行调用,是这样吗?

如果您在这里查看Ajax文档,您应该使用JSON-p进行跨域访问:http://docs.sencha.com/extjs/5.1/5.1.0-apidocs/#/api/Ext.data.proxy.Ajax,限制部分说:

"AjaxProxy不能用于从其他域检索数据。如果您的应用程序正在http://domainA.com它无法从加载数据http://domainB.com因为浏览器有一个内置的安全策略,禁止域通过AJAX相互通信。

如果您需要从另一个域读取数据,但无法设置代理服务器(某些软件运行在您自己域的web服务器上,并透明地将请求转发到http://domainB.com,让它看起来像是来自http://domainA.com),您可以使用Ext.data.proxy.JsonP和一种名为JSON-P(带填充的JSON)的技术,只要服务器在http://domainB.com是为了支持JSON-P响应而设立的。有关更多详细信息,请参阅JsonPProxy的介绍文档。"

最新更新