2015-11-09 12 views
5

Tôi là người dùng mới cho dịch vụ web amazon. Gần đây tôi đang học máy chủ amazon lambda và tôi có một mã Node.js nhỏ như dưới đây (sau đây ví dụ này: http://docs.aws.amazon.com/apigateway/latest/developerguide/getting-started.html):cách sử dụng phương thức GET hoặc POST ajax để chuyển dữ liệu sang hàm amazon 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 
}; 

Nhưng tôi không biết làm thế nào để sử dụng phương pháp jquery ajax để vượt qua "cái tên" tham số cho mã đó. Nó hoạt động khi tôi sử dụng:

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

và tôi có thể nhận được kết quả: { "Hello": "Người sử dụng"}

nhưng làm thế nào tôi có thể sử dụng phương pháp ajax jquery về quá khứ "tên" biến?

Mã ajax mà tôi đã viết:

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

Nó cảnh báo err khi tôi chạy nó. Xin giúp đỡ.

Cảm ơn bạn ~

+1

url này https://my-api-id.execute-api.region-id.amazonaws.com/test/mydemoresource không khả dụng. –

+1

Có Suchit, đây chỉ là một liên kết ví dụ, trong trường hợp thực tế tôi đang sử dụng url api của riêng mình. Thx – TimLee

+0

bạn cần đảm bảo rằng url của bạn không cung cấp bất kỳ lỗi nào liên quan đến máy chủ. –

Trả lời

4

Vì vậy, có vẻ như bạn có thể có một vài vấn đề. Một, tránh sử dụng "tên" như một tên biến. Hai, dữ liệu có thể không được phân tích cú pháp chính xác. Bạn cần JSON.stringify khi bạn gửi nó (yeah, bạn đã có JSON, nhưng nó khó tính):

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

Tôi cũng đã thêm crossdomain: đúng, và contentType: 'application/json'.

Trong hàm lambda để lấy khóa/giá trị trong JSON được chuyển, bạn chỉ cần sử dụng event.whateverkey (khi sử dụng sự kiện kiểm tra trong bảng điều khiển Lambda làm cho các phím khớp với những gì bạn đang gửi để tránh bất kỳ sự cố nào) .

Dữ liệu trong callback thành công của bạn trong chức năng ajax của bạn là gì trở lại từ hàm lambda, vì vậy tôi khuyên bạn nên JSON.stringifying rằng trong hàm lambda, và không phải là thành công để đảm bảo nó được gửi một cách chính xác:

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

Cảm ơn bạn rất nhiều Katharine Osborne ~ Nó hoạt động sau khi tôi thêm "JSON.stringify (data)" vào mã của tôi ~ Một điều nữa, tôi muốn hỏi làm thế nào tôi có thể làm điều đó với phương thức GET ... ví dụ, tôi muốn để truy cập "https://my-api-id.execute-api.region-id.amazonaws.com/test/mydemoresource?name=peter" trong trình duyệt để nhận kết quả. Tôi không biết cách cấu hình cổng API để làm phương thức GET ... Cảm ơn và xin lỗi vì tiếng anh nghèo của tôi ~ – TimLee

+0

Tôi không thể hiển thị mã trong một nhận xét, nhưng bạn sẽ cần tạo một hàm lambda riêng biệt sử dụng GET . Cuộc gọi ajax của bạn không cần truyền vào bất kỳ dữ liệu nào (vì vậy bạn không cần contentType, dữ liệu hoặc kiểu dữ liệu và loại là 'GET'. Có thể hỏi một câu hỏi khác và liên kết đến nó ở đây. –

Các vấn đề liên quan