2015-08-21 5 views
2

Я пытаюсь реализовать ссылку на странице сервера Groovy, которая отправляет запрос POST, содержащий текст ссылки, на которую они нажали, на другую GSP, затем загрузите эту страницу. Я пробовал несколько разных решений этой проблемы из других вопросов StackOverflow, но каждый из них заканчивает повышение ошибки org.apache.tomcat.util.http.fileupload.FileUploadBase$InvalidContentTypeException: the request doesn't contain a multipart/form-data or multipart/mixed stream, content type header is null. Что тут происходит? Меня тоже интересуют разные подходы.Ошибка говорит, что запрос POST не содержит многостраничный/форматированный или многочастный/смешанный поток, хотя я явно определяю его как таковой

Запрос:

<script type="text/javascript" src="resources/post.js"></script> 
<a href="actions/manage.gsp" onclick="post('/actions/manage', {name: '${file}'});">${file}</a> 

post.js:

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(); 
} 

manage.gsp:

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

ответ

1

только опечатка удалить точку после form.setAttribute ('enctype', 'multipart/form-data');

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) 
      }); 
} 
+0

Хорошая уловка, но, к сожалению, ошибка все еще там. – code0821

+1

вы можете попробовать с приложением/x-www-form-urlencoded – volkinc

+1

Нет разницы .. – code0821

-1

Я думаю, что вы пропустили "входной тип = файл" отсутствует.

+1

Я не вывешивать файл, хотя. Это просто текст. – code0821