JQuery,AJAX,POST请求,参数丢失

时间:2014-06-30 16:49:43

标签: java jquery ajax

我的Web应用程序基于Spring MVC(4.0.5)。 我尝试使用jQuery(v.2.1.1)通过AJAX发送POST请求:

function deleteItem(id) {
    alert("Deleting " + id);
    $.ajax({
        url: "ajax/delete_item",
        type: 'POST',
        dataType: 'html',
        data:  {"id": id},
        contentType: 'application/json',
            mimeType: 'application/json',
            success: function(data) {
                var txt = data;
                $('#message').html(txt);
            },
        error: function(data, status, err) {
            $('#message').html(err);
        }
    });
}

成功调用Controller的方法,但请求中没有参数:

@RequestMapping(value = "/ajax/delete_item", method = RequestMethod.POST)
public @ResponseBody String ajaxDelete(HttpServletRequest request) {
    Enumeration<String> en = request.getParameterNames();
    while (en.hasMoreElements()) {
        String pname = en.nextElement();
        System.out.println("//// " + pname); // just for test
    }
    String idStr = request.getParameter("id");
    Integer id = Integer.parseInt(idStr);
    //...

为什么请求参数丢失?不仅仅是值,参数本身也会丢失。 这里有什么问题?

3 个答案:

答案 0 :(得分:0)

如果您从 ajax 传递内容类型contentType: 'application/json',请在Spring方法声明中添加该设置,如下所示:(在定义中添加produces = "application/json"

  @RequestMapping(value = "/ajax/delete_item", method = RequestMethod.POST , produces = "application/json")
  public @ResponseBody String ajaxDelete(HttpServletRequest request) {

还有一点需要注意,

您提到的是数据类型和mimeType ,但它并不统一。

mimeType: 'application/json'应使用dataType: 'json'而非 html 编写。

答案 1 :(得分:0)

我不是100%确定你的解决方案有什么问题,但我可以给你一个适合我的例子

使用Jquery的AJAX请求:

 // Do AJAX
    $(function () {
        $.post(mobileUrl + "/leave/requestLeave",
            { startDate: startDate, endDate: endDate, leaveTypeId: leaveTypeId,
                notes: notes, isStartDayHalfDay: isStartDayHalfDay, isHalfDayEndDay: isHalfDayEndDay },
            function (response) {
                $('#feedbackTextArea').show();
            }
        );
    });

控制器方法

@RequestMapping(value = "/requestLeave", method = RequestMethod.POST)
    @ResponseBody
    public String createOrUpdateNewForm(String startDate, String endDate, String leaveTypeText, String leaveTypeId,
                                        String notes, String isStartDayHalfDay, String isHalfDayEndDay) {

       startDate = new DateTime(startDate).toDate() etc

        }
    }

要记住的一件事是ajax请求中的参数名称应该与控制器方法实现中的变量名称相匹配

答案 2 :(得分:-1)

    $("#drpop").change(function () {
     var code = $(this).val(); 
    $.ajax({ 
    url: '/Ordering/OrderingTable',
    type: 'post',
    datatype: 'json',
    data: { OperCode: code },
     success:function(msg){
alert(msg);
     } }); }); 
    [HttpPost] 
    public ActionResult OrderingTable(string OperCode) 
    {
     Orderingbll order = new Orderingbll(); 
    var result = order.ListCategory(OperCode);//here you write your code
     return Json(result,JsonRequestBehavior.AllowGet);
    }