Wie finde ich heraus, ob XMLHttpRequest.send () funktioniert hat?
ich benutzeXMLHttpRequest
um eine Datei von zu sendenjavascript
Code zu einemdjango view
Ich muss feststellen, ob die Datei gesendet wurde oder ob ein Fehler aufgetreten ist. Ich habe jquery verwendet, um das folgende Javascript zu schreiben.
Im Idealfall möchte ich dem Benutzer eine Fehlermeldung anzeigen, dass die Datei nicht hochgeladen wurde. Gibt es eine Möglichkeit, dies in zu tunjavascript
?
Ich habe versucht, dies zu tun, indem ich a zurückgebesuccess/failure
Nachricht vondjango view
setzen diesuccess/failed message
wiejson
und zurücksenden des serialisierten json von derdjango view
Dafür habe ich das gemachtxhr.open()
non-asynchronous
. Ich habe versucht, die auszudruckenxmlhttpRequest
Objekt istresponseText
.Dasconsole.log(xhr.responseText)
zeigt an
response= {"message": "success"}
Was ich mich frage, ist, ob dies der richtige Weg ist, dies zu tun. In vielen Artikeln fand ich die Warnung, dass
Die Verwendung von async = false wird nicht empfohlen
Gibt es also eine Möglichkeit herauszufinden, ob die Datei gesendet wurde, während sie aufbewahrt wird?xhr.open()
asynchron?
$(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);
}
Meinedjango
view extrahiert Dateien aus Formulardaten und schreibt sie in einen Zielordner.
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")
BEARBEITEN:
Ich habe das mit Hilfe von @ FabrícioMatté zum Laufen gebracht
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');
}
}
}