在HTML页面中访问Web服务,我有一个静态站点,我想访问该站点中的一个Web服务。
答案 0 :(得分:4)
如果您正在运行静态站点,我假设您要访问的Web服务不在同一个域,而您无法在服务器端设置代理 。如果两个假设都是正确的,则不能使用"普通" ajax因为浏览器中的原始策略相同。您最好的选择可能是JSONP,因为它受到许多网络服务的支持。
我将举一个简单的例子。检索存储在密钥" mykey"下的值。使用JavaScript中的openkeyval存储webservice和jQuery,调用
$.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
}
});
请注意,现在很多人认为Cross-origin resource sharing (CORS)是JSONP的更好替代方案。但是,开始使用它可能有点困难。
答案 1 :(得分: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>
答案 2 :(得分: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.
无论如何,这就是我要做的。希望我的回答有所帮助!
布兰登
答案 3 :(得分: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";
}
});
});
);
答案 4 :(得分:0)
它是可能的,但你需要一些jquery,javascript,ajax for it