2017-07-29 133 views
0

我有打電話來的AWS API網關端點一個非常簡單的AJAX代碼:無法解析請求主體爲JSON:無法識別的記號

$.ajax({ 
     url: 'https://omitted.execute-api.ap-southeast-2.amazonaws.com/test/rec', 
     type: 'post', 
     data: { 
      'zipcode': '1234', 
      'url': 'www.google.com' 
     }, 
     dataType: 'json', 
     success: function (data) { 
      console.info(data); 
     } 
    }); 

什麼我得到的回覆是:

莫非

無法解析請求主體爲JSON:無法識別的記號「郵編」:期待(「真」,「假」或「空」)`

的數據應該是JSON格式,所以我在做什麼錯?

我也曾嘗試:

$.post('https://omitted.execute-api.ap-southeast-2.amazonaws.com/test/rec', 
    { 
     'zipcode': '1234', 
     'url': 'www.google.com' 
    }, 
    function(data, textStatus) { 
     //data contains the JSON object 
     //textStatus contains the status: success, error, etc 
}, "json"); 

$.post('https://omitted.execute-api.ap-southeast-2.amazonaws.com/test/rec', 
    'zipcode=1234&url=www.google.com', 
    function(data, textStatus) { 
     //data contains the JSON object 
     //textStatus contains the status: success, error, etc 
}, "json"); 

而且他們正在返回相同的結果。

+1

這通常是來自AWS LAMBDA一個問題,你是如何API網關設置。你的代碼看起來很好。我會檢查你是如何在API網關上設置集成的。 –

+1

@Mark_M雖然Mark的郵遞員工作得很好,所以我懷疑這個問題不應該在AWS對嗎? –

+0

是的,那會讓我覺得端點沒問題... –

回答

1

問題解決了:

$.postJSON = function(url, data, callback) { 
    return jQuery.ajax({ 
    headers: { 
     'Accept': 'application/json', 
     'Content-Type': 'application/json' 
    }, 
    'type': 'POST', 
    'url': url, 
    'data': JSON.stringify(data), 
    'dataType': 'json', 
    'success': callback 
    }); 
}; 
0

請從鍵刪除「,如:

data: { 
     zipcode: '1234', 
     url: 'www.google.com' 
    }, 
+0

沒有區別 –

0

這通常是來自AWS LAMBDA一個問題,你是如何API網關設置。你的代碼看起來很好。我會檢查你是如何在API網關上設置集成的。

我會檢查在APIGateway您的集成安裝,以確保你有這樣的:在你的模板映射

{"body-json" : $input.json('$')} 

對付JSON。

+0

我們現在在AWS控制檯上,我們可以在哪裏找到或添加它? –

+0

這在API網關的「方法集成」選項卡中。如果您在打開的資源下單擊POST。它位於「集成請求」下的「Body Mapping Templates」中。這有點煩人的設置。很多人使用Lambda Proxy集成來避免處理這個問題。 –

+0

好吧,我們進去了&添加了一個新的內容類型'application/json',然後我們進入了模板,我們在那裏添加了哪一行? –

0

你的客戶端代碼非常好,問題出在端點實現上,服務器無法解析json。