在 HTML 页面中访问 Web 服务,我有一个静态站点,我想访问该站点中的一个 Web 服务。
5 回答
如果您运行的是静态站点,我假设您要访问的 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 的更好替代方案。但是,对您来说开始可能会有点困难。
我同意 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.
无论如何,这就是我会做的。希望我的回答以一种或另一种方式有所帮助!
-布兰登
试试 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>
您也可以使用 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";
}
});
});
);
它是如此可能,但你需要一些 jquery、javascript、ajax