2016-08-22 43 views
0

我試圖使用xmlHttpRequest POST在Meteor項目中上傳文件。使用Django REST框架2.3.14。{Javascript}如何在調用POST時返回Json xmlHttpRequest

我使用:

var file = $('#control_import_file')[0].files[0]; 
var xmlHttpRequest = new XMLHttpRequest(); 
xmlHttpRequest.onreadystatechange = function (e) { 
    if (e.target.status == 200) { 
     var resp = JSON.parse(e.target.response); 
     if (resp.status == 'success') { 
      alert("success"); 
     } else { 
      alert("fail"); 
     } 
    } 
}; 
xmlHttpRequest.onload = function() {}; 

xmlHttpRequest.open("POST", "http://mydemosite.net/orders/import-coupon/25/", true); 

if (window.FormData) { 
    var formData = new FormData(); 
    formData.append("datafile", file); 
    xmlHttpRequest.send(formData); 
} 

在鍍鉻時,它返回:

事件{isTrusted:真,類型: 「readystatechange」,目標: 的XMLHttpRequest,currentTarget當前:XMLHttpRequest的,的EventPhase:2 ...}

所以我可以很容易地得到JSON字符串:target.response object:

「」{「status」:「error」,「data」:{「error_data」:[「test123」], 「error_code」:0,「error_msg」:「檢查失敗」},「error_data 「: [」 test123 「], 」ERROR_CODE「:0 」ERROR_MSG「: 」檢查失敗「}」

JSON.parse(e.target.response); - >搞定我想要的。

但是在Firefox中:它返回所有JSON字符串上面以HTML格式:

<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"/><meta name="robots" content="NONE,NOARCHIVE"...</html> 

任何人都可以幫助我如何處理在Firefox錯誤響應?或者有什麼方法可以在所有瀏覽器中獲得響應? 非常感謝!

+0

你爲什麼不使用jQuery

xmlHttpRequest.setRequestHeader("Accept","application/json"); 

檢查? –

+3

相關http://i.stack.imgur.com/ssRUr.gif - 不是對你的抨擊@DanielRoseman,正是我認爲每當有人表示它時! :) –

回答

1

Django的休息Framwork檢查「接受」頭文件來定義,如果他必須返回HTML,JSON,CSV或任何其他形式,他可以使(CF:http://www.django-rest-framework.org/api-guide/renderers/

,因爲你正在使用XMLHttpRequest的人工,嘗試添加接受標題爲setRequestHeader。喜歡的東西:在控制檯要傳遞正確的標題上的Chrome和Firefox

希望這有助於

+0

太棒了!非常感謝!我試圖setRequestHeader(「Content-type」,「text/html」);現在我知道它爲什麼不工作=)))) – christ

相關問題