Hva er det enkleste SOAP-eksemplet med Javascript?
Svaret bør være så nyttig som mulig:
**Dette kan ikke gjøres med ren JavaScript med mindre webtjenesten er på samme domene som siden din. Redigering: I 2008 og i IE 10 kan dette ikke gjøres med ren JavaScript med mindre tjenesten er på samme domene som siden din.
Hvis webtjenesten er på et annet domene [og du må støtte IE<10], må du bruke en proxy-side på ditt eget domene som henter resultatene og returnerer dem til deg. Hvis du ikke trenger gammel IE-støtte, må du legge til CORS-støtte i tjenesten din. I begge tilfeller bør du bruke noe slikt som lib'en som timyates foreslo, fordi du ikke ønsker å måtte analysere resultatene selv.
Hvis webtjenesten er på ditt eget domene, bør du ikke bruke SOAP. Det er ingen god grunn til å gjøre det. Hvis webtjenesten er på ditt eget domene, bør du modifisere den slik at den kan returnere JSON og spare deg selv for alle problemene som følger med SOAP.
Det korte svaret er: Ikke gjør SOAP-forespørsler fra javascript. Bruk en webtjeneste til å be om data fra et annet domene, og hvis du gjør det, kan du analysere resultatene på serversiden og returnere dem i en JSON-vennlig form.
Thomas:
JSON er å foretrekke for frontend-bruk fordi det er javascript. Derfor har du ingen XML å forholde deg til. SOAP er vanskelig uten å bruke et bibliotek på grunn av dette. Noen nevnte SOAPClient, som er et bra bibliotek, og vi begynte med det i vårt prosjekt. Det hadde imidlertid noen begrensninger, og vi måtte skrive om store deler av det. Det har blitt utgitt som SOAPjs og støtter overføring av komplekse objekter til serveren, og inkluderer noen eksempler på proxy-kode for å konsumere tjenester fra andre domener.
Det enkleste eksemplet er følgende:
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<GetInfoByZIP xmlns="http://www.webserviceX.NET">
<USZip>string</USZip>
</GetInfoByZIP>
</soap:Body>
</soap:Envelope>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<GetInfoByZIPResponse xmlns="http://www.webserviceX.NET">
<GetInfoByZIPResult>
<NewDataSet xmlns="">
<Table>
<CITY>...</CITY>
<STATE>...</STATE>
<ZIP>...</ZIP>
<AREA_CODE>...</AREA_CODE>
<TIME_ZONE>...</TIME_ZONE>
</Table>
</NewDataSet>
</GetInfoByZIPResult>
</GetInfoByZIPResponse>
</soap:Body>
</soap:Envelope>
Men det er mye arbeid uten eksterne JavaScript-biblioteker.