2014-11-03 3 views
0

Я думаю, что это должен быть очень простой код jquery, но я не могу увидеть, что он передает любой результат серверу. Я просто хочу проверить строку на данный момент, нет необходимости в файле! На сервере, я вижу только многокомпонентные/форм-данных в запросе, но поле параметра {} ..... Пожалуйста, помогите ...Почему мой formdata.append не отправляет пару ключевых значений на сервер?

Host: localhost:8888 
Connection: keep-alive 
Content-Length: 143 
Origin: http://localhost:8888 
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.111 Safari/537.36 
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryUCJkE7tIQ5AqLm74 
Accept: */* 
Referer: http://localhost:8888/ 
Accept-Encoding: gzip,deflate 
Accept-Language: en-US,en;q=0.8,zh-CN;q=0.6 

и запрос полезной нагрузки выглядит

------WebKitFormBoundary93G8teUQTA7hGmxn 
Content-Disposition: form-data; name="action" 

insert 
------WebKitFormBoundary93G8teUQTA7hGmxn-- 

Я использую Java Servlet в стороне сервера, где

String action = request.getParameter("action"); 

Retrun нуль

и ниже мой код

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
    pageEncoding="ISO-8859-1"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
<title>Distributed Storage System</title> 
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script> 

</head> 
    <body> 
    <div id="result"></div> 
    <form id="form"> 
     <table> 
      <tr> 
      <td colspan="2" style="font-weight:bold;">Insert:</td>   
      </tr> 
      <tr>   
      <td>Key:<input type="text" id="insertKey" name="key"/></td> 
      <td>File:<input type="file" id="insertValue" name="file"/></td> 
      <td><input type="button" value="Insert" id="insertValue" onClick="insert()"/></td>   
      </tr> 
     </table> 
    </form> 
    <script type="text/javascript"> 
     function insert(){ 
      var data = new FormData(); 
      data.append('action','insert'); 
      //var file = $("#insertValue")[0].files[0]; 
      var xhr = new XMLHttpRequest(); 
      xhr.open('POST', '/distributedstorage', true); 
      xhr.send(data); 
     } 

    </script> 
    </body> 
</html> 
+0

выглядит нормально - HTTP: // jsfiddle. net/arunpjohny/y951t24b/1/- посмотрите на 'Request Payload' под' Headers' –

+0

им жаль, но что вы думаете ean "посмотреть на полезную нагрузку запроса под заголовками" – ouyadi

+0

да. Запросить полезную нагрузку по заголовкам –

ответ

1

Для Content-Type: multipart/form-data мы должны использовать FileItem методы getFieldName() getString() для получения данных регулярных полей формы.
Здесь я обеспечиваю более подробную информацию из документации с отрывками, чтобы прочитать все данные полой формы в Servelet с использованием ServletFileUpload

Give a look into apache-docs for Processing the uploaded items

Смотрите ниже кода-чик для понимания на этой обработке:

Обращение с загруженными элементами элементов формы как с обычными полями, так и с файлами

// Process the uploaded items 
Iterator<FileItem> iter = items.iterator(); 
while (iter.hasNext()) { 
    FileItem item = iter.next(); 

    if (item.isFormField()) { 
     processFormField(item); 
    } else { 
     processUploadedFile(item); 
    } 
} 

Процесс правильной формы поля

// processFormField 
if (item.isFormField()) { 
    String name = item.getFieldName(); 
    String value = item.getString(); 
    ... 
} 

Процесс загрузки файла

// processUploadedFile 
if (!item.isFormField()) { 
    String fieldName = item.getFieldName(); 
    String fileName = item.getName(); 
    String contentType = item.getContentType(); 
    boolean isInMemory = item.isInMemory(); 
    long sizeInBytes = item.getSize(); 
    ... 
} 

Действуйте остальную часть кода в http://commons.apache.org/proper/commons-fileupload/using.html

Смежные вопросы