-3

在 HTML 页面中访问 Web 服务,我有一个静态站点,我想访问该站点中的一个 Web 服务。

4

5 回答 5

4

如果您运行的是静态站点,我假设您要访问的 Web 服务不在同一个域中,并且您无法在服务器端设置代理。如果两个假设都是正确的,则由于浏览器中的原始策略相同,您不能使用“普通”ajax。您最好的选择可能是JSONP,因为许多 Web 服务都支持它。

我会给你一个简单的例子。要使用 jQuery 从 JavaScript 中的openkeyval存储 Web服务检索存储在键“mykey”下的值,请调用

$.ajax({
    url: "http://api.openkeyval.org/mykey",
    dataType: "jsonp",
    success: function(data){
        // do something with data
    }
});

并存储一个值,调用

$.ajax({
    url: "http://api.openkeyval.org/store/",
    data: "mykey=myvalue",
    dataType: "jsonp",
    success: function(data){
        // your value has been succesfully saved
    }
});

请注意,现在许多人认为跨域资源共享 (CORS)是 JSONP 的更好替代方案。但是,对您来说开始可能会有点困难。

于 2013-04-18T14:03:44.063 回答
1

我同意 benedolph 提供的答案,但认为我可能会添加一些与他的假设相反的想法。

这些步骤可能比您想要的更复杂,但实际上并不是非常复杂——而且即使不是免费的,也会很便宜。但是至少要留出一整天的时间...

1)如果您没有,请获取一个域来代理多个服务。免费或每月低至 5 美元(取决于您的需要)。

2)写你的代理。这可以用您选择的语言来完成 - Java(推荐 Play 框架)、PHP(推荐 CodeIgniter 框架)、Javascript(Node)、Ruby(Rails)等。您将要做的(从高层次)可能看起来喜欢:

- Read request. This would be a url you configure on the server app. 
  The url might look something like,  "http://yourdomain.net/get/mashup/{service1:yourfirstservice.com, service2:yournextservice.com,...}. 

- Parse the json into individual requests and load each of them from your server app. (The fastest way that I've found to complete this task is by using cURL's multi_init and multi_exec functions, via PHP. That said, Java and Ruby have equally powerful multi-threading capabilities).

- Put the results of each query into a json map.

- Once all responses come back, output the json response from your server and consume on your client side.

无论如何,这就是我会做的。希望我的回答以一种或另一种方式有所帮助!

-布兰登

于 2013-04-19T03:31:06.287 回答
1

试试 Javascript,这里是示例代码

 <html>
  <head>
   <title>Hello World</title>
    <script language="JavaScript">
     function InitializeService(){
      service.useService(http://localhost/MyWebService.asmx?wsdl, "HelloWorldService");
      service.HelloWorldService.callService("HelloWorld");
     }
     function ShowResult(){
      alert(event.result.value);
     }
    </script>
   </head>
  <body onload="InitializeService()" id="service" 
        onresult="ShowResult()"> </body>
 </html>
于 2013-04-09T05:48:10.633 回答
0

您也可以使用 Jquery,但您访问的 Web 服务必须与发出请求的 jQuery 脚本位于同一域中。它必须遵守相同的域策略。

$(document).ready(function() {
    $('#Save').click(function() {
        $.ajax({
            url: "mydomain.com/test/ws/getData",
            type: "POST",
            dataType: "json",
            data: "{BizName:'" + BizName + "'}",
            contentType: "application/json; charset=utf-8",
            success: function(msg) {
                $('#status').html('Id: '+msg['d']['Id']);
            },
            error: function(e) {
                $('#status').innerHTML = "Unavailable";
            }
        });
    });
); 
于 2013-04-09T05:56:35.827 回答
0

它是如此可能,但你需要一些 jquery、javascript、ajax

于 2013-04-17T14:00:58.127 回答