2012-07-23 34 views
0

我想通過jQuery Ajax提交上傳多個文件。如何防止瀏覽器在Ajax提交後重定向到FORM操作?

一切工作正常,除了提交後,瀏覽器轉到表單中指定的網址,即使我添加一個Return False

如果我使用$("#upload").serialize(),而不是FormData,它不會被重新定向!這裏是我的CoffeeScript代碼:

# Initialization code 
$("#upload").submit -> 
    ajaxUpload() 
    return false 

# Handler 
ajaxUpload = -> 
    fd = new FormData() 
    files = $("#uploadFiles")[0].files 
    $.each files, (i, file) -> 
    fd.append("file" + i, file) 
    $.ajax 
    type: $("#upload").attr("method"), 
    url: $("#upload").attr("action"), 
    data: fd, 
    # data: $("#upload").serialize(), 
    success: (data, text, xhr) -> 
     debug "Success: " + JSON.stringify(data) 
     loadEventAgain() 
    error: (xhr, status) -> 
     debug "Error: " + JSON.stringify(xhr) 
    alert "done" 
    return false 
+1

你有沒有試過'e.preventDeafult();'? – 2012-07-23 11:43:37

+0

我知道JS但不是CoffeeScript,所以也許這是一個愚蠢的問題,但是那個代碼的最後一行返回false?這是全部在事件處理程序或什麼? – nnnnnn 2012-07-23 11:44:52

+0

是頁面上唯一的東西,因爲Ajax基本上會重新加載頁面的一部分。對於你的要求,我有點困惑。 – 2012-07-23 11:45:12

回答

0

在事件處理函數,你應該使用e.preventDefault(); 這樣可以防止默認動作是在你的情況下提交表單。

+1

但是,OP返回false,這相當於同時執行'e.preventDefault()'和'e.stopPropagation()'... – nnnnnn 2012-07-23 11:46:26

+1

除非代碼在返回false之前失敗,否則您的頁面將刷新/加載並且您錯過任何可能會返回的錯誤消息。返回虛假就是這樣一種笨拙的接近它的方式,在這種情況下幾乎總是「錯誤的」方法。 – Tjkoopa 2012-07-23 12:04:47

0

提交事件處理程序通常會獲取傳遞的事件對象。執行

ev.preventDefault(); 
//and optionally 
return false; 
0

原來的代碼是失敗...... 我需要包括:

processData: false 
contentType: false 

防止JQuery的做一些不那麼理想的法寶。