2015-11-05 82 views
0

我正在使用ajax上傳文件跨域。我認爲這個bug是在JS中的一部分。如何使用Formdata上傳文件

但我無法弄清楚什麼是錯的。

<form id="upload"> 
     <div class="control-group"> 
      <div class="controls"> 
       <input id="file" name="file" type="file"> 
      </div> 
      <div class="form-group"> 
       <button class="btn btn-primary" onclick="Submit()" type="button">submit</button> 
      </div> 
     </div> 
</form> 

這裏是我的js

var form = $('#upload'); 
var formData = new FormData(form); 

$.ajax({ 
    url: URLs, 
    data: formData, 
    cache:false, 
    contentType: false, 
    processData: false, 
    crossDomain: true, 
    type:"POST", 
    dataType:'jsonp', 

    success: function(msg){ 
     alert(msg["foo"]); 
    } 

}); 

回答

0
dataType:'jsonp', 

JSONP是POST請求(該文件上傳要求)不兼容。

使用jQuery支持的任何其他dataType。

由於您正在提出交叉原點請求,因此您需要目標服務器通過CORS授予您權限。

+0

但是我必須跨域。數據類型的哪個扭曲可以跨域?我只找到jsonp – user3927463

+0

@ user3927463 - 任何一種。看到這個答案的最後一段。 – Quentin

+0

你能給我一些關於CORS的鏈接嗎?這是我第一次處理這個問題。我不知道應該搜索哪個關鍵字。 – user3927463

0

當用戶點擊該按鈕,你調用該函數Submit()但它不是在你的js定義。這應該工作:

function Submit() 
{ 
    var form = $('#upload'); 
    var formData = new FormData(form); 

    $.ajax({ 
     url: URLs, 
     data: formData, 
     cache:false, 
     contentType: false, 
     processData: false, 
     crossDomain: true, 
     type:"POST", 
     dataType:'jsonp', 

     success: function(msg){ 
      alert(msg["foo"]); 
     } 

    }); 
} 
+0

我忘了發佈它。在我的js中,我有。 – user3927463

+0

是否定義了'URLs' var? –

+0

是的。我已經定義了 – user3927463