2015-11-09 7 views
5

Ich bin ein neuer Benutzer für Amazon Web Service. Ich studiere amazon Lambda-Server vor kurzem, und ich habe einen kleinen node.js Code wie unten (nach diesem Beispiel: http://docs.aws.amazon.com/apigateway/latest/developerguide/getting-started.html):wie ajax GET oder POST-Methode zu alten Daten zu Amazon Lambda node.js Funktion

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 
}; 

Aber ich weiß nicht, wie jQuery Ajax-Methode zu verwenden, „name“ übergeben Parameter zu diesem Code. Es funktioniert, wenn ich benutze:

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

und ich kann das Ergebnis erhalten: { „Hallo“: „Benutzer“}

aber wie kann ich jQuery Ajax-Methode Vergangenheit „name“ Variable verwenden?

Der Ajax-Code, den ich schrieb:

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"); 
     } 
}); 

Es Alarm err, wenn ich es laufen. Bitte helfen.

Danke ~

+1

Diese URL https://my-api-id.execute-api.region-id.amazonaws.com/test/mydemoresource ist nicht verfügbar. –

+1

Ja Suchit, dies ist nur ein Beispiel Link, in Wirklichkeit verwende ich meine eigene API. Thx – TimLee

+0

Sie müssen sicherstellen, dass Ihre URL keinen Serverfehler verursacht. –

Antwort

4

So sieht es aus wie Sie ein paar Probleme haben könnten. Vermeiden Sie "name" als Variablennamen. Zweitens werden die Daten wahrscheinlich nicht korrekt analysiert. Sie müssen JSON.stringify, wenn Sie es senden (ja, haben Sie bereits JSON bekam, aber es ist pingelig):

$.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 
    } 
}); 

ich auch domänenübergreif hinzugefügt haben: true, und content: ‚application/json‘.

In der Lambda-Funktion, um den Schlüssel/Wert in der übergebenen JSON zu erhalten, verwenden Sie einfach event.whateverkey (wenn Sie das Testereignis in der Lambda-Konsole verwenden, stimmen die Schlüssel mit dem überein, was Sie senden, um Probleme zu vermeiden) .

Die Daten in Ihren Erfolg Rückruf in Ihrer Ajax-Funktion ist das, was aus der Lambda-Funktion kommt zurück, so empfehle ich JSON.stringifying, dass in der Lambda-Funktion, und nicht den Erfolg sicherzustellen, dass es richtig gesendet wird:

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

Vielen Dank Katharine Osborne ~ Es funktioniert, nachdem ich "JSON.stringify (Daten)" zu meinem Code hinzufügen ~ Noch eine Sache, ich möchte fragen, wie kann ich es mit GET-Methode tun ... zum Beispiel möchte ich Zugriff auf "https://my-api-id.execute-api.region-id.amazonaws.com/test/mydemoresource?name=peter" im Browser, um das Ergebnis zu erhalten. Ich weiß nicht, wie ich API-Gateway zu tun, GET-Methode zu tun ... Vielen Dank und Entschuldigung für mein schlechtes Englisch ~ – TimLee

+0

Ich kann Code in einem Kommentar nicht zeigen, aber Sie müssten eine separate Lambda-Funktion, die GET verwendet . Ihr Ajax-Aufruf muss keine Daten übergeben (Sie brauchen also weder contentType, data oder dataType, noch den Typ "GET". Vielleicht stellen Sie eine andere Frage und verlinken Sie hier. –