2016-03-02 154 views
0

我不是前端开发人员,我花了相当长的时间尝试这样做。希望你们能帮助我。 我有将文件发送到API中的服务器,如下面表格:从表单提交获取JSON响应

<form id="uploadForm" action="url/upload/" method="post" enctype="multipart/form-data" accept-charset="ISO-8859-1"> 

     <div class="inputFileCustom"> 
     <input type="file" size="45" name="file" id="uploadFiles" accept="application/pdf"/> 
     <label for="uploadFiles"> 
      <div class="ic-bt ic-bt-details ic-bt-text btn btn-border"> 
      Choose a file 
      </div> 
     </label> 
    </div> 

    <input type="submit" value="Upload PDF" class="btn btn-primary" /> 
</form> 

url/upload返回一个JSON,如:

{ "status": "ok"/"fail" } 

我需要两样东西:

  1. 预防提交重定向到url/upload;
  2. 从服务器获取JSON响应,如果成功,则调用loadFiles()函数(它已在工作)。

我正在使用javascript for loadFiles()函数,但它非常简单。

+0

请分享loadFiles()函数 –

+0

你使用的是jQuery吗?您可以在“提交”表单上安装事件侦听器,并在提交后使用event.preventDefault()不要调用“url/upload”。将它与一些AJAJ相结合,就完成了。 –

+0

@MichaelRöhrig我正在使用jQuery,我试过了。但任何Ajax代码工作。有错误的请求错误。 – Leonardo

回答

2

您可以使用jQuery表格处理程序,请参见http://api.jquery.com/jquery.ajax/

<script>  

    // Attach a submit handler to the form 
    // Attach a submit handler to the form 


$("#uploadForm").submit(function(event) { 

    var formData = new FormData(); 
    formData.append("uploadFiles", $('[name="file"]')[0].files[0]); 
    event.stopPropagation(); 
    event.preventDefault(); 
    $.ajax({ 
     url: $(this).attr("action"), 
     data: formData, 
     processData: false, 
     contentType: false, 
     type: 'POST', 
     success: function(data) { 
     alert(data); 
     loadFiles() 
     } 
    }); 
    return false; 
    }); 

    </script> 

请参阅本stackoverflow question

+0

谢谢,但它没有奏效。在调试时,当它跨越'var formData ...'行时,它会调用'url/upload'。 – Leonardo

+0

尝试删除操作并在Ajax调用中添加硬编码的URL。 –

+0

我照你说的做了,但仍然没有工作,它重定向。 – Leonardo

2

看起来您需要使用Javascript发布请求。如果你正在使用JQuery,你可以使用$.ajax例如:

$.ajax({ 
    url: '', 
    type: '', 
    data: {}, 
    success: function(data){ 
     console.log(data); 
    } 
}) 

使用,这意味着它不会从形式重定向的页面了,这样就可以显示成功或错误信息到同一屏幕。

了解更多信息

+0

我之前尝试过,但AJAX返回错误的请求。 – Leonardo

+0

这是一个服务器端错误,所以要么是期望你没有传递的参数,要么是服务器端的其他东西。 Ajax是正确的解决方案,使用上面的代码将向服务器发出请求并注销响应。 –

0
1. Prevent submit to redirect to url/upload  

    <form id="uploadForm" action="url/upload/" method="post" enctype="multipart/form-data" accept-charset="ISO-8859-1" onsubmit ='return checkRegistration()'> 

       <div class="inputFileCustom"> 
       <input type="file" size="45" name="file" id="uploadFiles" accept="application/pdf"/> 
       <label for="uploadFiles"> 
        <div class="ic-bt ic-bt-details ic-bt-text btn btn-border"> 
        Choose a file 
        </div> 
       </label> 
      </div> 

      <input type="submit" value="Upload PDF" class="btn btn-primary" /> 
     </form> 


    <script> 
     function checkRegistration(){ 
      if(!form_valid){   
       return false; 
      } 
      return true; 
     } 
     </script> 
+0

这个仅有代码的答案并不能解释发生了什么问题或如何解决问题。 – ssube

0

检查此琴:https://jsfiddle.net/41mnz0z1/

$('#uploadForm').submit(function(e) { 
    e.preventDefault(); 
    $.ajax({ 
     url: '/echo/json/', 
     data: $(this).serialize(), 
     type: 'POST', 
     success: function(data) { 
      alert(data); 
     } 
    }); 
}); 

e.preventDefault()在提交表单(将您重定向到另一个页面)后阻止浏览器的标准操作。 data: $(this).serialize()将表单数据发送到您想要的url: 'fileUpload.php'

它与文件一样。

+0

这不起作用,我不知道服务器是如何得到这个请求,而是使用'$(this)。 serialize()'返回一个错误,如果我在URL属性(url + fileToPost)中使用filename,它会返回Bad Request。 – Leonardo