我正在使用XMLHttpRequest
將javascript
代碼中的文件發送到django view
。我需要檢測文件是否已發送或是否發生了某些錯誤。我使用jquery寫下面的JavaScript。如何找出XMLHttpRequest.send()是否工作
理想情況下,我想向用戶顯示該文件未上傳的錯誤消息。是否有某種方法可以在javascript
中執行此操作?
我試圖從django view
返回success/failure
消息,把success/failed message
爲json
,併發送回從django view
。爲此序列化JSON要做到這一點,我做了xhr.open()
non-asynchronous
。我試圖打印xmlhttpRequest
對象的responseText
.The console.log(xhr.responseText)
顯示
response= {"message": "success"}
什麼我不知道的,這是否是做this.In很多文章的正確方法,我發現了警告,
不建議使用async = false
那麼,有沒有什麼方法可以找出文件是否已經發送,同時保持xhr.open()
的異步?
$(document).ready(function(){
$(document).on('change', '#fselect', function(e){
e.preventDefault();
sendFile();
});
});
function sendFile(){
var form = $('#fileform').get(0);
var formData = new FormData(form);
var file = $('#fselect').get(0).files[0];
var xhr = new XMLHttpRequest();
formData.append('myfile', file);
xhr.open('POST', 'uploadfile/', false);
xhr.send(formData);
console.log('response=',xhr.responseText);
}
我django
視圖提取來自表格數據文件,並寫入到目標文件夾。
def store_uploaded_file(request):
message='failed'
to_return = {}
if (request.method == 'POST'):
if request.FILES.has_key('myfile'):
file = request.FILES['myfile']
with open('/uploadpath/%s' % file.name, 'wb+') as dest:
for chunk in file.chunks():
dest.write(chunk)
message="success"
to_return['message']= message
serialized = simplejson.dumps(to_return)
if store_message == "success":
return HttpResponse(serialized, mimetype="application/json")
else:
return HttpResponseServerError(serialized, mimetype="application/json")
編輯:
我得到這個與@FabrícioMatté
xhr.onreadystatechange=function(){
if (xhr.readyState==4 && xhr.status==200){
console.log('xhr.readyState=',xhr.readyState);
console.log('xhr.status=',xhr.status);
console.log('response=',xhr.responseText);
var data = $.parseJSON(xhr.responseText);
var uploadResult = data['message']
console.log('uploadResult=',uploadResult);
if (uploadResult=='failure'){
console.log('failed to upload file');
displayError('failed to upload');
}else if (uploadResult=='success'){
console.log('successfully uploaded file');
}
}
}
'xhr.readyState == 4個&& xhr.status == 200'不足夠? –
原諒我的無知,如果django視圖中的文件寫入失敗併發生服務器錯誤(500),我可以檢測到使用'xhr.readyState == 4 && xhr.status == 500'? – damon
如果你的'xhr'對象返回一個響應,它應該包含'status'和'readyState'屬性。試着'console.log'來確保。 =] –