ajax调用不支持请求方法'POST'

时间:2015-08-13 12:47:12

标签: jquery ajax spring-mvc

我正在对我的spring控制器进行ajax调用,以便在db中创建一些数据,调用如下:

function myfunc(pId,cId,paIndex,cIndex,type)
{
    $.ajax({
        type : "POST",
        url : "./home/useraction/save",
        data : {
            pId : pId,
            cId : cId,
            type : type
        },
        contentType : "application/json; charset=utf-8",
        dataType : "json",
        async : true,
        success : function(data) {
            alert(data);
        }
    });
}

我的控制器就像:

@Controller
@RequestMapping("/home")
public class HomeController 
{
    @RequestMapping(value="/useraction/save" ,method = RequestMethod.POST)
    public @ResponseBody GenericResponse save(Model model,HttpServletRequest request) throws Exception 
    {
        String actionType = request.getParameter("type");
        try
        {
            if(actionType != null)
            {
                if (UserActionTypeEnum.UPVOTE.name().equalsIgnoreCase(type)) {
                    // do something
                } else if (UserActionTypeEnum.DOWNVOTE.name().equalsIgnoreCase(actionType)) {
                    // do something
                } else if (UserActionTypeEnum.SHARE.name().equalsIgnoreCase(actionType)) {
                    // do something
                } else if (UserActionTypeEnum.ADD_POST_TO_BANK.name().equalsIgnoreCase(actionType)) {
                    // do something
                }
            }
        }
        catch (Exception e) {
            logger.error("Exception in saveUserActionOnPost() >> " + e.getStackTrace());
        }
        return "success";
    }
}

但是我收到以下错误:

HTTP状态405 - 不支持请求方法“POST”,不允许为请求的资源指定HTTP方法 任何帮助,这里有什么问题

2 个答案:

答案 0 :(得分:2)

实际上它是一个安全的网址。在我的产品中使用spring security。需要在ajax调用中发送csrf信息。然后它工作了

var token = $('#csrfToken').val();
var header = $('#csrfHeader').val();

$.ajax({
     type : "POST",
     url : "./home/useraction/save",
     data : {
        pId : pId,
        cId : cId,
        type : type
     },
    async : true,
    beforeSend: function(xhr) {
        xhr.setRequestHeader("Accept", "application/json");
        xhr.setRequestHeader("Content-Type", "application/json");
        xhr.setRequestHeader(header, token);
    },

答案 1 :(得分:1)

我建议将完整请求的url写入控制器,与ajax相同。 把它写进ajax 类型:'POST', dataType:'json',