从表单提交中获取JSON响应

时间:2016-03-02 16:30:24

标签: javascript html json

我不是前端开发人员,我花了很多时间尝试这样做。希望你们能帮助我。 我有一个表单,它将文件发送到服务器中的API,如下所示:

<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()函数(已经有效)。
  3. 我正在使用javascript for loadFiles()函数,但它非常简单。

4 个答案:

答案 0 :(得分:3)

您可以使用jquery表单处理程序作为

<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

答案 1 :(得分:2)

您似乎需要使用Javascript发布请求。如果您使用的是JQuery,则可以使用$.ajax例如:

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

使用此功能意味着它不会将页面重定向到表单之外,因此您可以将成功或错误消息显示在同一屏幕上。

有关详细信息,请参阅http://api.jquery.com/jquery.ajax/

答案 2 :(得分: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>

答案 3 :(得分: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'

它与文件的作用相同。