错误说POST请求不包含multipart / form-data或multipart / mixed流,即使我明确定义它也是如此

时间:2015-08-21 17:51:29

标签: javascript forms rest groovy gsp

我试图在Groovy服务器页面中实现一个链接,该链接发送一个POST请求,其中包含他们点击的链接文本到另一个GSP,然后加载该页面。我已经从StackOverflow上的其他问题尝试了几个不同的解决方案来解决这个问题,但是每一个问题最终都会引发<script type="text/javascript" src="resources/post.js"></script> <a href="actions/manage.gsp" onclick="post('/actions/manage', {name: '${file}'});">${file}</a> 错误。这里发生了什么?我也对不同的方法感兴趣。

请求:

function post(path, params, method) {
    method = method || "post";
    var form = document.createElement("form");
    form.setAttribute('enctype','multipart/form-data').
    form.setAttribute("method", method);
    form.setAttribute("action", path);

    for(var key in params) {
        if(params.hasOwnProperty(key)) {
            var hiddenField = document.createElement("input");
            hiddenField.setAttribute("type", "hidden");
            hiddenField.setAttribute("name", key);
            hiddenField.setAttribute("value", params[key]);

            form.appendChild(hiddenField);
        }
    }

    document.body.appendChild(form);
    form.submit();
}

post.js:

<%! static output = "text/html" %>
Testing!
<% log.info("Found ${request.parts.size()} parts") %>

manage.gsp:

{{1}}

2 个答案:

答案 0 :(得分:1)

在form.setAttribute(&#39; enctype&#39;,&#39; multipart / form-data&#39;)之后删除点拼写错误;

function post(path, params, method) {
    method = method || "post";
    var form = document.createElement("form");
    form.setAttribute("enctype","application/x-www-form-urlencoded");
    form.setAttribute("method", method);
    form.setAttribute("action", path);

    for(var key in params) {
        if(params.hasOwnProperty(key)) {
            var hiddenField = document.createElement("input");
            hiddenField.setAttribute("type", "hidden");
            hiddenField.setAttribute("name", key);
            hiddenField.setAttribute("value", params[key]);

            form.appendChild(hiddenField);
        }
    }

    document.body.appendChild(form);
    form.submit();
}

谈到这个概念,我想为你提供这个:

function post(path, params, method) {
 method = method || "post";
 var formData = new FormData();
 for(var key in params) {
        if(params.hasOwnProperty(key)) {
           formData.append(key,params[key] );
        }
    }

        $.ajax({
            type: method,
            url: path,
            data: formData,
            cache: false,
            contentType: false,
            processData: false
            }).done(function( result ) { 
               //alert(result)  
            });
}

答案 1 :(得分:-1)

我认为您错过了“输入类型=文件”。