【问题标题】:How to add a request parameter to XMLHttpRequest如何向 XMLHttpRequest 添加请求参数
【发布时间】:2015-07-21 17:01:40
【问题描述】:

我有一个文件 (data),我使用 XMLHtppRequest JS 对象发送到 servlet。我对此没有任何问题。我在 servlet 中通过request.getInputStream() 接收它,解析它并完美地获取文件。当我还必须发送/接收文件名时,问题就来了。我正在尝试将该文件名放在<input type="hidden"> 中,并在javascript 中调用submit() 方法发送它。关键是我无法使用 servlet 中的request.getParameter("fileName");(它始终为空)来获取它,而且我不知道我做错了什么,或者我只是不能拥有submit() 加上XMLHtmlRequest.send()一起(两个 POST)。

Javascript:

function save(data){

    var loadedFilename = "exampleFileName";
    var xhr = new XMLHttpRequest();
    var base64data = (new core.Base64()).convertUTF8ArrayToBase64(data);

    xhr.open("POST", "ServletUpload", true);
    xhr.send(base64data);

    document.getElementById("fileName").value = loadedFilename;
    document.forms["formExample"].submit();
}

Servlet doPost 方法:

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // TODO Auto-generated method stub

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

    byte[] content = Base64.decodeBase64(IOUtils.toByteArray(request.getInputStream()));

    ByteArrayInputStream input = new ByteArrayInputStream(content);

    FileOutputStream file = new FileOutputStream("/home/user/Documents/workspace/tests/editingTests.odt");
    IOUtils.copy(input, file);

    input.close();
    file.close();
}

HTML 表单:

<form method="POST" name="formExample" action="ServletUpload">
    <input type="hidden" name="fileName" id="fileName" />
</form>

【问题讨论】:

  • 由于表单将 Method 属性设置为 -“POST”,因此您不会在服务器端收到名称为 fileName 的请求“parameter”(附加到 URL 的参数)。请改用request.getAttribute()
  • @ringbearer,不幸的是这不起作用,它仍然为空。反正我之前用过getParameter()和POST方法没有任何问题。

标签: javascript forms servlets xmlhttprequest


【解决方案1】:
function save(data){

    var loadedFilename = "exampleFileName";
    var xhr = new XMLHttpRequest();
    var base64data = (new core.Base64()).convertUTF8ArrayToBase64(data);

    //changing this line should fix the problem 
    xhr.open("POST", "ServletUpload"+"?fileName="+loadedFilename , true);
    xhr.send(base64data);

    //following two lines are not needed 
    //document.getElementById("fileName").value = loadedFilename;
    //document.forms["formExample"].submit();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-12
    • 1970-01-01
    • 2013-06-18
    • 2016-04-13
    • 1970-01-01
    相关资源
    最近更新 更多