【问题标题】:Using Ext.Ajax.request to call cross-domain web service that requires WS Reliable Messaging使用 Ext.Ajax.request 调用需要 WS Reliable Messaging 的跨域 Web 服务
【发布时间】:2015-04-02 22:24:46
【问题描述】:

我们目前有一个 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 extjs ws-reliablemessaging


    【解决方案1】:

    你应该使用 JSON-P 进行跨域访问,如果你在这里查看 Ajax 文档: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,使其看起来像是来自@ 987654325@),您可以使用 Ext.data.proxy.JsonP 和一种称为 JSON-P (JSON with Padding) 的技术,只要将http://domainB.com 上的服务器设置为支持JSON-P 响应。详情请参阅 JsonPProxy 的介绍文档。”

    【讨论】:

    • 感谢 Guilherme,这很有趣,因为我记得有人告诉我上面的内容是跨域工作的。无论如何,我主要关心的仍然是找出是否有一种方法可以使用类似于上述代码的方式访问需要 WS-Reliable Messaging 的 Web 服务器,或者我们是否必须使用其他解决方案,例如调用另一台服务器与目标服务器建立可靠的消息连接并实际进行调用。
    猜你喜欢
    • 1970-01-01
    • 2012-02-10
    • 1970-01-01
    • 2012-02-07
    • 2012-09-14
    • 1970-01-01
    • 1970-01-01
    • 2012-02-11
    相关资源
    最近更新 更多