Hej!
Pracuję nad projektem wykorzystującym eBay Trading API. Jednak ze względów technologicznych mogę wykorzystać tylko JS/jQuery i HTML.
Aby wygenerować klucz sesji potrzebuję przesłać na podany adres dane w formacie xml metodą POST. Jednak użycie jQuery.post() nie jest możliwe, ponieważ (o ile mi wiadomo) nie da się dodać własnych nagłówków HTTP. Otóż część przesyłanych danych (id użytkownika, nazwa wywoływanej funkcji, itp) musi zostać dołączona jako nagłówek, natomiast reszta (np. application id) musi widnieć jako przesyłane dane. Stąd moje pytanie:
Jak mogę za pomocą JavaScript przesłać dane XML przy jednoczesnym dołączeniu własnych nagłówków HTTP metodą POST?
Wygooglowałem funkcję jQuery.ajax(), ale poniższy kod nie działa (generuje metodę OPTIONS zamiast POST).
Wykaz przesłanych danych (wzięte z FireBuga):
**Nagłówki odpowiedzi**
HTTP/1.1 200 OK
Allow: GET, HEAD, POST, TRACE, OPTIONS
Server: Apache-Coyote/1.1
X-EBAY-ESB-GUID: urn:uuid:8DF4B95E670525E45E1331304146086
Date: Mon, 05 Mar 2012 18:47:49 GMT
Content-Length: 0
Connection: keep-alive
**Nagłówki zapytania**
OPTIONS /ws/api.dll HTTP/1.1
Host: api.sandbox.ebay.com
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:10.0.2) Gecko/20100101 Firefox/10.0.2
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: pl,en-us;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate
Connection: keep-alive
Origin: http://localhost
Access-Control-Request-Method: POST
Access-Control-Request-Headers: x-ebay-api-app-name,x-ebay-api-call-name,x-ebay-api-cert-name,x-ebay-api-compatibility-level,x-ebay-api-dev-name,x-ebay-api-siteid
Pragma: no-cache
Cache-Control: no-cache
Kod źródłowy:
<!DOCTYPE html>
<html>
<head>
<script src="http://code.jquery.com/jquery-latest.js"></script>
</head>
<body>
<form id="searchForm">
<input type="submit" value="connect" />
</form>
<!-- the result of the search will be rendered inside this div -->
<div id="result"></div>
<script>
/* attach a submit handler to the form */
$("#searchForm").submit(function(event) {
/* stop form from submitting normally */
event.preventDefault();
/* get some values from elements on the page: */
url = "https://api.sandbox.ebay.com/ws/api.dll";
var xml_data="xml=<?xml version=\"1.0\" encoding=\"utf-8\"?><GetSessionIDRequest xmlns=\"urn:ebay:apis:eBLBaseComponents\"><RuName>***</RuName></GetSessionIDRequest>";
$.ajax({
url: url,
type: "POST",
data: xml_data,
beforeSend: function( xhrObj ) {
//xhrObj.setRequestHeader("Accept", "text/javascript");
xhrObj.setRequestHeader("X-EBAY-API-APP-NAME","***");
xhrObj.setRequestHeader("X-EBAY-API-DEV-NAME","***");
xhrObj.setRequestHeader("X-EBAY-API-CERT-NAME","***");
xhrObj.setRequestHeader("X-EBAY-API-COMPATIBILITY-LEVEL","655");
xhrObj.setRequestHeader("X-EBAY-API-CALL-NAME","GetSessionID");
xhrObj.setRequestHeader("X-EBAY-API-SITEID","0");
},
success: function( data ) {
if (console && console.log){
console.log( 'Sample of data:', data.slice(0,100) );
}
}
});
});
</script>
</body>
</html>