2011-02-17 112 views
3

我目前正在開發基於Trafikanten API上的Web站點的公共交通系統(http://reis.trafikanten.no/topp2009/topp2009ws.asmx使用Web服務通過AJAX直接

該網站有幾個功能,雖然它的網絡服務。它使用SOAP格式在.NET框架中實現。但是我們需要在JavaScript等客戶端語言中使用它的功能,以便能夠在網頁中顯示信息。任何人都可以提出一些簡單的方法來應對這種情況?

回答

2

只要你正在使用LAMP堆棧:

我會使用的NuSOAP(http://sourceforge.net/projects/nusoap/)libarary寫一個PHP腳本消耗SOAP的Web服務和返回JSON通過AJAX調用到您的JavaScript。

編輯

它甚至在.NET容易。只需右鍵單擊您的項目並選擇添加Web服務。然後,您可以像訪問其他任何對象一樣訪問Web服務的方法。至於在JS中使用它,你可以實現創建一個ASP頁面,以JSON格式輸出結果,然後像使用LAMP堆棧一樣使用jQuery。儘管使用ASP的後期功能,但最好讓它在JS中完成繁重的工作,並在視圖後面的代碼文件中直接使用Web服務。

希望有所幫助。

+0

Jesse,Thanx您的建議,但我不能使用該庫,因爲我們的網站不是基於PHP的,它基於ASP。任何其他選擇...? Thanx提前 -neo – Neo182 2011-02-17 19:08:11

+0

@ Neo182 - 請參閱我的編輯。 – 2011-02-18 20:30:38

0

我已經在過去做過,因爲Jesse說的是.NET。我構建了一個「組合服務」或適配器服務,然後調用其他服務。組合的服務將與SOAP服務進行通信,而您的應用程序會將JSON與您的組合服務進行通信。

1

如果該服務不支持JSONP(它可能不是ASMX服務),則需要創建服務代理以在本地Web服務器上運行。然後,使用該本地服務充當中介,避免瀏覽器的跨域限制。

如果您在ASP.NET項目中添加一個服務引用Top2009WS,這樣的事情可能充當GetLines)例如服務器端代理(:

[WebMethod] 
public Line[] GetLines(int ID) { 
    var client = new Topp2009WS.Topp2009WSSoapClient(); 

    client.open(); 

    return client.GetLines(ID); 
} 

然後,您可以通過調用代理這樣的客戶端:

$.ajax({ 
    url: 'Service.asmx/GetLines', 
    type: 'POST', 
    dataType: 'json', 
    contentType: 'application/json', 
    data: '{"ID":' + 12345 + '}', 
    success: function(response) { 
    // Alerts the first result's "LineName" 
    alert(response.d[0].LineName); 
    } 
}); 

看到這個職位的詳細信息,using jQuery to call the web service