【问题标题】:Get JSON response from Form Submit从表单提交获取 JSON 响应
【发布时间】:2016-03-02 16:30:24
【问题描述】:

我不是前端开发人员,我花了很多时间尝试这样做。希望你们能帮助我。 我有一个将文件发送到服务器中的 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() 函数(该函数已在工作)。

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

【问题讨论】:

  • 请分享 loadFiles() 函数
  • 你在使用 jQuery 吗?您可以在表单的“提交”上安装事件侦听器,并在提交后使用 event.preventDefault() 不调用“url/upload”。将它与一些 AJAJ 结合起来就完成了。
  • @MichaelRöhrig 我正在使用 jQuery,我试过了。但是任何 ajax 代码都有效。收到错误请求错误。

标签: javascript html json


【解决方案1】:

您可以使用 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

【讨论】:

  • 谢谢,但没有用。在调试时,当它越过var formData... 行时,它会调用url/upload
  • 尝试删除操作并在 Ajax 调用中添加硬编码 URL。
  • 我按照你说的做了,但还是不行,它会重定向。
  • 它返回Uncaught TypeError: Illegal invocation。我尝试更改文件名的 formData 但仍然不起作用。
  • 非常感谢尚卡尔!您的代码更新帮助我解决了我的问题!我只需要将 formData.append("uploadFiles"... 更改为服务器正在等待的名称。
【解决方案2】:

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

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

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

更多信息请参见http://api.jquery.com/jquery.ajax/

【讨论】:

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

检查这个小提琴: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'

对文件也一样。

【讨论】:

  • 这不起作用。我不知道服务器是如何得到这个请求的,但是使用$(this).serialize() 会返回一个错误。如果我在 URL 属性(url + fileToPost)中使用文件名,它会返回错误请求。
【解决方案4】:
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>

【讨论】:

  • 这个仅代码的答案没有解释什么是错误的或如何解决它。
猜你喜欢
  • 2011-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多