2016-08-28 95 views
0

我正嘗試向某個JSON數據的後端發送POST請求。從前端的調用看起來是這樣的:無法從使用Play Framework的Ajax請求接收POST正文

function register() { 
    var user = $("#form_reg_username").val(); 
    var pass = $("#form_reg_password").val(); 
    var referal = $("#form_reg_referal").val(); 
    var postbody = {}; 
    var url = "http://" + location.host + "/api/admin/register"; 
    postbody.username = user; 
    postbody.password = pass; 
    postbody.referal = referal; 

    var jsonbody = JSON.stringify(postbody); 
    console.log(jsonbody); 

    $.ajax({ 
    type: "POST", 
    url: url, 
    data: jsonbody, 
    dataType: "json", 
    success: registerHandler() 
    }); 
} 

生成的日誌看起來是這樣的:

{"username":"jakob","password":"11111","referal":"urgotislove"} 

這很好。

下面是我如何處理在後端請求的開始(我用打2.4)

public Result adminRegister() { 
     // Generate JSON from postbody 
     ObjectNode json = Json.newObject(); 

     Logger.info("Body: " + request().body().asText()); 
     JsonNode body = request().body().asJson(); 

     String username = body.get("username").asText(); 
     String password = body.get("password").asText(); 
     String referal = body.get("referal").asText(); 
     ... 
} 

看着我的應用程序日誌信息日誌看起來是這樣的:

[info] application - Body: null 

然後,我嘗試獲取json值的第一行中得到一個Nullpointer異常。

因此,由於某些原因,POST正文似乎沒有被正確接收。

感謝您提前提供任何幫助。

+0

你不需要'stringify'您向服務器發送的內容。只需在您的Ajax請求中發送'postbody'。另外,如果您使用瀏覽器開發人員工具檢查發送到服務器的Ajax請求,您是否可以確認發送的請求是否正確? – c4k

+0

據我所見,請求看起來不錯。我也只是試圖發送一個包含有效載荷的POST請求,這也會導致相同的應用程序日誌,所以問題與後端一樣。 –

回答

0

原來,Postbody被正確傳輸,但由於某種原因,.asText()以及.asJson()方法無法正常工作並返回null。

我修好了我這個小問題解決方法:

Http.RequestBody requestBody = request().body(); 
Map<String, String[]> body = requestBody.asFormUrlEncoded(); 

String username = body.get("username")[0]; 
String password = body.get("password")[0]; 
String referal = body.get("referal")[0];