所以我正在使用play框架并尝试进行Ajax POST调用以向我的动作提交product_id和数量的JSON,并将其添加到当前用户购物车中。我已经尝试了很多不同的东西,每次我的JSON数据在控制器中为空。我真的被困住了,无法弄明白为什么。
我想提交表单的HTML是:
@(产品:产品)
<li data-task-id="@product.id">
<img src="@product.imageUrl" alt="No Image Available">
<h2>@product.name</h2>
<!-- Price Display -->
@if(product.price != 0.0){
<span class="product-price">@product.price</span>
<form name="ajaxform" id="ajaxform" action="@routes.Item.addToCart()" method="POST">
<input type="text" name="id" value="@product.id" hidden="true"/> <br/>
<input type="text" name="qty" value ="1" /> <br/>
<input type="submit" name="submit"/>
</form>
}
@if(product.price == 0.0){
<span class="available-in-store">Only Available in Store</span>
}
</li>
这是我的javascript:
$("#ajaxform").submit(function(e)
{
var postData = $(this).serializeArray();
var formURL = $(this).attr("action");
$.ajax(
{
url : formURL,
type: 'POST',
dataType : 'json',
contentType:'application/json',
data : {postData: JSON.stringify(postData)},
success:function(data, textStatus, jqXHR)
{
},
error: function(jqXHR, textStatus, errorThrown)
{
}
});
//e.preventDefault(); //STOP default action
});
$("#ajaxform").submit(); //SUBMIT FORM
是的,我尝试过制作数据:postData而不是使用stringify。它有相同的结果。
以下是我的控制器中处理请求的操作:
public static Result addToCart(){
JsonNode jsonNode = request().body().asJson();
if(jsonNode == null){
return badRequest("Expecting JSON data");
}
//Customer currCustomer = Customer.find.where().eq("email", session().get("email")).findUnique();
//System.out.println(cartItemForm.data().get("productId"));
//Product product = Product.find.byId(productId);
//ShoppingCart cart = new ShoppingCart(currCustomer, product, quantity);
//cart.save();
//currCustomer.shoppingCartList.add(cart);
return ok("Item Added to Cart");
}