2010-04-05 86 views
1

我想在JavaScript中使用SOAP,但我沒有得到如何啓動它。 這是我用PHP編寫的代碼示例,它工作正常。我想用Javascript寫這段代碼。在下面的代碼中,我從www.example.com調用一個api,並調用某個API,我們需要傳遞一些參數。如何在javascript中使用肥皂

$soapClient = new SoapClient("https://www.example.com/WSDL");  
    $param_sh = array(); 
    $header = new SoapHeader('http://somesite.com/action/', 'user_credential', $param_sh); 
    $soapClient->__setSoapHeaders(array($header)) 
    $param = array("with some parameter"); 
    $contents = $soapClient->__call("name_of_method",array($param)); 

    print($contents); 

回答

3

假設你在談論瀏覽器中的Javascript,你將無法使用SOAP。瀏覽器遵守所謂的同源策略,它說(鬆散地),你不能從JavaScript做跨域請求。這意味着如果它與瀏覽器頁面當前位於同一個域中,則只能向SOAP服務(或任何HTTP請求)發出請求。由於這種限制/功能,沒有人在Javascript中實現SOAP客戶端時遇到過很多麻煩(儘管它們可能確實存在)。

最好的辦法是通過PHP進行SOAP調用,然後從網頁(通過javascript)向發出實際SOAP請求的PHP頁面發出AJAX請求。

+4

雖然更現代的瀏覽器確實允許使用適當的標頭進行跨域請求:請參閱http://hacks.mozilla.org/2009/07/cross-site-xmlhttprequest-with-cors/,http:/ /www.w3.org/TR/access-control/ – 2010-04-05 07:16:57

+0

另請注意,瀏覽器擴展也可能允許JS中的跨域請求。 – mikemaccana 2011-01-28 11:36:27

3

雖然您可以谷歌搜索並找到它們,例如here,但JavaScript並沒有開箱即用的SOAP庫。不是說這不會做任何事來解決@Alan引用的限制。 Web服務仍然需要位於原始服務器上。現在

4

,因爲這個問題被問後超過5年,很多東西發生了Javascript和網絡一般,所以:

  • 可以發送跨域請求和現代瀏覽器是100%OK(如果你發送它們的服務器允許CORS,當然)

  • 有很多庫都爲serverclient side javascript。

  • 關於StackOverflow的主題有很多問題。