2015-11-09 12 views
5

Sono un nuovo utente per il servizio Web Amazon. Recentemente sto studiando server di Amazon lambda e ho un piccolo codice node.js come di seguito (seguendo questo esempio: http://docs.aws.amazon.com/apigateway/latest/developerguide/getting-started.html):come utilizzare il metodo GET o POST ajax per passare i dati alla funzione lambda node.js

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

Ma io non so come usare il metodo jquery ajax per passare "nome" parametro per quel codice. Funziona quando uso:

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

e posso ottenere il risultato: { "Ciao": "Utente"}

ma come posso usare jQuery metodo ajax alla variabile passato "nome"?

Il codice Ajax che ho scritto:

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

Si avviso err quando l'eseguo. Aiutatemi.

Grazie ~

+1

questo URL https://my-api-id.execute-api.region-id.amazonaws.com/test/mydemoresource non è disponibile. –

+1

Sì Suchit, questo è solo un link di esempio, in realtà sto usando il mio URL personale. Thx – TimLee

+0

è necessario assicurarsi che il proprio URL non dia alcun errore relativo al server. –

risposta

4

così sembra che si potrebbe avere un paio di questioni. Uno, evitare di usare "nome" come nome di una variabile. Due, i dati probabilmente non vengono analizzati correttamente. È necessario JSON.stringify quando lo si invia (sì, avete già JSON, ma è schizzinoso):

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

Ho anche aggiunto crossdomain: vero, e contentType: 'application/json'.

Nella funzione lambda per ottenere la chiave/valore nel passato in JSON, basta usare event.whateverkey (quando si utilizza l'evento di test nella console Lambda, fare in modo che i tasti corrispondano a ciò che si sta inviando per evitare problemi) .

I dati contenuti nella callback successo nella vostra funzione ajax è quello che torna dalla funzione lambda, quindi vi consiglio JSON.stringifying che nella funzione lambda, e non il successo per assicurarsi che viene inviato correttamente:

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

Grazie mille Katharine Osborne ~ Funziona dopo aver aggiunto "JSON.stringify (data)" al mio codice ~ Un'altra cosa, vorrei chiedere come posso farlo con il metodo GET ... ad esempio, voglio per accedere a "https://my-api-id.execute-api.region-id.amazonaws.com/test/mydemoresource?name=peter" nel browser per ottenere il risultato. Non so come configurare gateway API per fare il metodo GET ... Grazie e scusa per il mio inglese scarso ~ – TimLee

+0

Non riesco a mostrare il codice in un commento, ma avresti bisogno di fare una funzione lambda separata che usi GET . La tua chiamata ajax non ha bisogno di passare alcun dato (quindi non hai bisogno di contentType, data o dataType e il tipo è 'GET'. Forse fai un'altra domanda e linkalo qui. –

Problemi correlati