2017-10-11 89 views
0

返回任何數據我一直在尋找在這一個答案,但沒有一個答案,我發現幫助解決這個問題:無法從jQuery的帖子

HTTP郵政通過jQuery沒有返回任何數據。

下面是javascript代碼:

$.post(
    <ENDPOINT_URL>, 
    <XYZ DATA SENT>, 
    function(data){ 
     //THIS IS THE PROBLEM HERE 
    }, 
    "json") 
    .fail(function(jqXHR, textStatus, errorThrown){ 
     alert(textStatus); 
    }); 

這就要求我的終點API URL罰款,返回代碼200和JSON響應體:

{message: "XYZ"} 

因此,這裏是我做了什麼到目前爲止:

  1. 由於異步行爲,我創建了一個函數來接收和處理數據輸入。什麼也沒有發生。
  2. 添加.fail來處理故障。根據一篇文章,我的JSON返回的格式可能不正確,並且放置該失敗處理失敗可能會讓我知道發生了什麼......有沒有辦法獲取實際的錯誤消息詳細信息?
  3. 驗證我的JSON。格式不正確還是我沒有意識到?
  4. 改爲用$ ajax代替整個代碼。仍然,得到相同的錯誤。

我希望能夠接收到該響應並處理消息「XYZ」。

謝謝大家的幫助,非常感謝。

教程/文章我已經按照:

https://api.jquery.com/jquery.post/

How do I return the response from an asynchronous call?

why cant I return data from $.post (jquery)

+0

'{message:「XYZ」}'無效JSON - 這正是返回的內容嗎?屬性名稱必須被引用,所以它應該是'{「message」:「XYZ」}'。 – nnnnnn

+0

你有沒有檢查過如何在''上處理數據?有沒有有效的回報數據或任何錯誤? –

回答

1

所有,非常感謝您的所有反饋 - 問題現在解決。 @Austin法語,在瀏覽服務器端和客戶端JavaScript的完整方法後,我意識到這個問題與頭文件有關。

我很抱歉沒有進一步擴展我的問題並提供更多詳細信息:我正在使用Amazon AWS API網關處理後端Lambda函數,客戶端調用該函數,該函數完成該工作並返回JSON:

{"message":"xyz"} 

我沒有在客戶端使用jQuery $ .post收到此消息。問題歸結爲AWS API網關處理請求並返回響應的方式。

我需要包括以下標題爲我的拉姆達的功能反應的一部分:

"Access-Control-Allow-Origin" : "*" 

下面是服務器端的響應的完整代碼:

//Response 
let responseCode = 200; 
var responseBody = { 
    message: responseMessage 
}; 
var response = { 
    statusCode: responseCode, 
    headers: { 
     "Access-Control-Allow-Origin" : "*" 
    }, 
    body: JSON.stringify(responseBody) 
}; 

現在在客戶端上我的原始函數(數據){...}接收到響應並能夠正確處理它,沒有錯誤被觸發。客戶端響應處理程序:

function(data){ 
    alert(JSON.stringify(data)); 
} 

再次感謝大家的幫助!

+0

有趣的。請更新您的標籤以包含AWS或亞馬遜網絡服務,以便其他人可以找到類似的問題。並更新任何可能幫助或證明有用的答案,甚至只是爲了讓你朝着正確的方向前進 –

0

嘗試以下操作:

$.post(
    ENDPOINT_URL, 
    myData, 
    function(data) { 
     var response = jQuery.parseJSON(data); 
     console.log(response); 
    } 
); 
+0

不起作用:(同樣的問題仍然沒有得到答覆,但在Chrome開發人員模式下,我確實看到響應以JSON形式進入。 – nukalov

0

這是我通常用它的方式。它發送數據就好像以html格式發送並接收json響應。

var value1, value2; 

$.ajax({ 
    type: "POST", 
    url: url, 
    data: {"property1" : value1, "property2" : value2}, 
    success: function(result, status, xhr){ 
    <here you can process the json you get as response in result} 
    }, 
    error: function(xhr, status, theError){ 
    <here process if ajax fails> 
    }, 
    dataType: "json" 
}); 
+0

不起作用。這幾乎與我之前嘗試的ajax代碼幾乎相同,但仍然不能得到任何東西,它確實調用了錯誤代碼,所以顯然有一些錯誤發生了,但是當我做了一個alert(theError)時,我什麼也沒有得到。 – nukalov

+0

如果錯誤函數被執行,那麼請求失敗。檢查網址,並明確指出是否與你指向的網址有關聯,同時檢查開發者控制檯是否有任何錯誤報告 – Juan

+0

如上所述,請求沒有失敗,我實際上得到了迴應我希望在Chrome的開發者控制檯(JSON響應和200個狀態代碼),並沒有錯誤報告。是的,錯誤功能正在觸發,這指出了響應的問題。完整的前端和後端日誌。 – nukalov

0

有兩件事情,將不適合在評論:

我喜歡這種格式AJAX:

var myUrl = $(selector).val(); 
$.post(myUrl, { name: "John", time: "2pm" }) 
    .fail(function (data) { /* code for failure */ }), 
    .done(function(data) { 
    alert("Data Loaded: " + data); 
}); 

要查看服務器返回然而,一件容易的做的是使用Chrome的調試器:

Chrome Debugger Console

轉到BP網絡在k選項卡,選擇調用方法,然後在右側子窗格中選擇響應。您不僅能夠看到響應代碼,還能看到返回的完整內容。

一些附加說明:

的。一旦AJAX完成,完成將調用該函數。

根據jquery版本,你可能沒有.done,而是.success,反之亦然。

+0

謝謝。我確實已經在Chrome中使用過,狀態碼是200,響應是{「message」:「xyz」},它是一個格式正確的JSON字符串。 – nukalov

+0

另外,我之前也使用過.done,但仍然沒有任何結果。 – nukalov

+0

@nukalov那麼看起來你得到了一個成功的POST響應和一個有效的JSON,所以定義.done或.success事件來處理它。 –