jak się dowiedzieć, czy działa XMLHttpRequest.send ()
ja używamXMLHttpRequest
wysłać plik zjavascript
kod do adjango view
.Czy muszę wykryć, czy plik został wysłany lub czy wystąpił błąd. Użyłem jquery do napisania następującego javascript.
Idealnie chciałbym pokazać użytkownikowi komunikat o błędzie, że plik nie został przesłany. Czy jest jakiś sposób, aby to zrobićjavascript
?
Próbowałem to zrobić, zwracając asuccess/failure
Wiadomość oddjango view
, kładącsuccess/failed message
tak jakjson
i odesłanie serializowanego jsona zdjango view
Na to zrobiłemxhr.open()
non-asynchronous
. Próbowałem wydrukowaćxmlhttpRequest
obiektresponseText
.Powierzchniaconsole.log(xhr.responseText)
przedstawia
response= {"message": "success"}
Zastanawiam się, czy jest to właściwy sposób. W wielu artykułach znalazłem ostrzeżenie
Używanie async = false nie jest zalecane
Czy jest jakiś sposób na sprawdzenie, czy plik został wysłany, zachowując jednocześniexhr.open()
asynchroniczny?
$(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);
}
Mójdjango
widok wyodrębnia plik z danych formularza i zapisuje go w folderze docelowym.
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")
EDYTOWAĆ:
Pracowałem z pomocą @ 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');
}
}
}