2016-03-02 163 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