2015-11-09 45 views
5

Jestem nowym użytkownikiem serwisu Amazon. Ostatnio uczę serwer amazon lambda i mam poniżej mały kod node.js (zgodnie z następującym przykładem: http://docs.aws.amazon.com/apigateway/latest/developerguide/getting-started.html):jak korzystać z metody ajax GET lub POST do przeszłych danych do amazon lambda node.js funkcja

console.log('Loading event'); 

exports.handler = function(event, context) { 
var name = (event.name === undefined ? 'No-Name' : event.name); 
context.done(null, {"Hello":name}); // SUCCESS with message 
}; 

Ale nie wiem, jak korzystać z metody jquery ajax przekazać „nazwa” parametr tego kodu. To działa, gdy używam:

curl -H "Content-Type: application/json" -X POST -d "{\"name\": \"PeterChan\"}" https://my-api-id.execute-api.region-id.amazonaws.com/test/mydemoresource 

i mogę uzyskać wynik: { "Hello": "użytkownik"}

ale w jaki sposób można użyć metody ajax jquery do zmiennej przeszłości "nazwisko"?

Kod ajax, że napisałem:

var data = {"name":"bbbb"}; 

$.ajax({ 
     type: "POST", 
     dataType: "json", 
     url:"https://my-api-id.execute-api.region-id.amazonaws.com/test/mydemoresource", 
     data: data, 
     //processData: false, 
     success: function(data) { 
      var text=JSON.stringify(data); 
      alert(text); 
      //console.log(data); 

     },error: function(data) { 
      alert("err"); 
     } 
}); 

ostrzegać ERR kiedy go uruchomić. Pleas pomoc.

Dziękujemy ~

+1

ten adres URL https://my-api-id.execute-api.region-id.amazonaws.com/test/mydemoresource jest niedostępny. –

+1

Tak Suchit, to tylko przykładowy link, w rzeczywistości używam mojego własnego adresu URL. Thx – TimLee

+0

musisz się upewnić, że twój adres URL nie daje żadnego błędu związanego z serwerem. –

Odpowiedz

4

Wygląda na to, że możesz mieć kilka problemów. Po pierwsze, należy unikać używania "name" jako nazwy zmiennej. Po drugie, dane prawdopodobnie nie są poprawnie przetwarzane. Musisz JSON.stringify po wysłaniu go (tak, masz już JSON, ale to jest wybredny):

$.ajax({ 
    url: 'https://mylambdafunctionurl/', 
    type: 'POST', 
    crossDomain: true, 
    contentType: 'application/json', 
    data: JSON.stringify(data), 
    dataType: 'json', 
    success: function(data) { 
     //success stuff. data here is the response, not your original data 
    }, 
    error: function(xhr, ajaxOptions, thrownError) { 
     //error handling stuff 
    } 
}); 

Dodałem również crossDomain: prawda i contentType: 'application/json'.

W funkcji lambda, aby uzyskać klucz/wartość w przekazanym JSON, wystarczy użyć event.whateverkey (podczas używania zdarzenia testowego w konsoli Lambda, aby klucze pasowały do ​​tego, co wysyłasz, aby uniknąć problemów) .

Dane w swój sukces zwrotnego w swojej funkcji ajax co wraca z funkcji lambda, więc polecam JSON.stringifying że w funkcji lambda, a nie sukces, aby upewnić się, że zostanie wysłany poprawnie:

context.done(null, JSON.stringify({"Hello":name})); 
+0

Dziękuję bardzo Katharine Osborne ~ Działa po dodaniu "JSON.stringify (dane)" do mojego kodu ~ Jeszcze jedno, chciałbym zapytać, jak mogę to zrobić za pomocą metody GET ... na przykład, chcę aby uzyskać dostęp do "https://my-api-id.execute-api.region-id.amazonaws.com/test/mydemoresource?name=peter" w przeglądarce. Nie wiem jak skonfigurować bramę API, aby wykonać metodę GET ... Dziękuję i przepraszam za mój słaby angielski ~ – TimLee

+0

Nie mogę pokazać kodu w komentarzu, ale trzeba by utworzyć osobną funkcję lambda, która używa GET . Twoje wywołanie ajax nie musi przekazywać żadnych danych (więc nie potrzebujesz contentType, data lub dataType, a typem jest "GET".) Może zadaj inne pytanie i link do niego tutaj. –