2 Stimmen

Django-Ausnahme bei einem AJAX-Aufruf

Ich habe eine Webanwendung mit Django entwickelt. Sie macht einen AJAX-Aufruf (mit jQuery's $.ajax ), um ein Bild auf der Grundlage eines bestimmten Eingabetextes zu aktualisieren. Der folgende Code wird zu diesem Zweck verwendet:

$('img#diagram').attr('src', '/images/ajax/ajax_loader.gif');
$.ajax({
    type:       'POST',
    url:        '/draw/',
    data:       { 'diagram':  $('#diagram-text').val() },
    cache:      false,
    success:    function(mesg, txtStatus, XmlHttpRequest) {
        result = $.parseJSON(mesg);
        if (result['error']) {
            alert('An error was encountered: ' + result['error']);
        }
        else {
            $('img#diagram').attr('src', result['diagram_url']);
        }
    },
    error:      function(XmlHttpRequet, txtStatus, errorThrown) {
        alert('Failed to draw the diagram!\n' + errorThrown);
    },
    dataType:   'html'
});

Es funktioniert ordnungsgemäß, d. h. das Bild wird aktualisiert, nachdem die Eingaben geändert wurden und die Schaltfläche "Zeichnen" angeklickt wurde.

Das Problem ist, wenn ich nichts eingebe und auf die Schaltfläche "Zeichnen" klicke, bleibt das AJAX-Ladebild stehen. Jetzt, nichts passiert, wenn ich eine der folgenden Aktionen ausführe:

  • Geben Sie einen Text ein und klicken Sie auf die Schaltfläche "Zeichnen".
  • Laden Sie die Seite neu

In der Tat wird die Seite nicht neu geladen.

Wenn ich nun den Django-Entwicklungsserver stoppe, erhalte ich die folgende Fehlermeldung:

Exception happened during processing of request from ('127.0.0.1', 44166)
Unhandled exception in thread started by <function inner_run at 0x9f6d5dc>
Error in sys.excepthook:
Traceback (most recent call last):
  File "/usr/lib/python2.6/dist-packages/apport_python_hook.py", line 48, in apport_excepthook
    if not enabled():
TypeError: 'NoneType' object is not callable

Original exception was:
Traceback (most recent call last):
  File "/usr/local/lib/python2.6/dist-packages/django/core/management/commands/runserver.py", line 60, in inner_run
    run(addr, int(port), handler)
  File "/usr/local/lib/python2.6/dist-packages/django/core/servers/basehttp.py", line 721, in run
    httpd.serve_forever()
  File "/usr/lib/python2.6/SocketServer.py", line 226, in serve_forever
    self._handle_request_noblock()
  File "/usr/lib/python2.6/SocketServer.py", line 283, in _handle_request_noblock
    self.handle_error(request, client_address)
  File "/usr/lib/python2.6/SocketServer.py", line 335, in handle_error
    import traceback
ImportError: No module named traceback

Kann jemand etwas vorschlagen? Natürlich kann ich eine Validierung setzen, um leere Zeichenfolgen zu verhindern. Aber warum este tatsächlich passiert, da AJAX asynchron ist?

1voto

silviomoreto Punkte 5161

Dies geschieht, wenn der Client die Verbindung schließt, bevor der Server die Daten gesendet hat.

Versuchen Sie die Funktion done anstelle von Erfolg.

   $.ajax({
        url: "/draw/",
        type: "POST",
        data: { 'diagram':  $('#diagram-text').val() },
    }).done(function(data) {
        result = $.parseJSON(mesg);
        if (result['error']) {
          alert('An error was encountered: ' + result['error']);
        }
        else {
            $('img#diagram').attr('src', result['diagram_url']);
        }
    });

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X