2013-04-09 66 views
-3

訪問HTML頁面中的Web服務,我有一個靜態網站,我想訪問該網站中的一個Web服務。如何在html頁面中訪問web服務?靜態網站?

+0

什麼類型的Web服務?休息?肥皂? HTML頁面是否在web服務的相同域(相同的服務器/地址)中? – acdcjunior 2013-04-16 02:25:19

+1

入住這裏 http://stackoverflow.com/questions/2741435/calling-a-net-webservice-from-a-plain-html-site-using-jquery 同樣的問題早已見怪不怪回答 – Sweety 2013-04-17 04:36:50

+0

你可能進一步闡述你的使用案例 – elsadek 2013-04-18 13:15:54

回答

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> 
+0

需要jQuery來完成這項工作?提及 – tgkprog 2013-04-18 19:46:59

+0

服務不是一個標準的JavaScript對象,你可能需要你的URL之間的字符串分隔符。 – EmeraldCoder 2013-04-19 01:56:16

0

您還可以使用jQuery,但是您訪問必須駐留在同一個域中即拍即request.It必須遵守的jQuery腳本的Web服務相同的域名政策。

$(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"; 
      } 
     }); 
    }); 
); 
0

它很可能的,但如果你正在運行一個靜態的網站,你會需要一些jQuery的,JavaScript中,阿賈克斯它

4

我假設你要訪問的Web服務是不在同一個域和你不能在服務器端建立代理。如果這兩個假設都是正確的,那麼由於瀏覽器中的原始策略相同,不能使用「普通」ajax。您最好的選擇可能是JSONP,因爲它受到許多Web服務的支持。

我會給你一個簡單的例子。要檢索下與JavaScript中使用jQuery的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 
    } 
}); 

請注意,現在很多人認爲Cross-origin resource sharing (CORS)是JSONP的更好替代方案。但是,爲您開始可能有點困難。

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. 

無論如何,這就是我會做的。希望我的回覆能夠以某種方式幫助你!

-Brandon

+0

+1爲乾淨的方式來做到這一點。此外,這種方式可能會緩存頻繁的請求。只需添加另一個服務器端選項:對於初學者來說,Python與[web2py](http://web2py.com)框架是一個簡單的選擇。有一個很好的[視頻](http://www.youtube.com/watch?v=M5IPlMe83yI&noredirect=1)關於如何使用包含緩存的web2py使用web服務。 [pythonanywhere](https://www.pythonanywhere.com/)提供一鍵安裝的免費託管服務。 – brdlph 2013-04-19 05:51:51