Frage

Ich versuche, einige grundlegende Ajax mit Django zu lernen. Mein einfaches Projekt ist eine Anwendung, die zufällig einen Prize aus den verfügbaren Preisen in der Datenbank auswählt, verringert seine Menge und kehrt prize.name auf der Seite.

Ich verwende diesen $ Schnipsel-Methode des jQuery abziehen. Das das einzige, was läuft ist die error Funktion in meinem $ Schnipsel Aufruf definiert, aber die Fehlermeldung sagt nichts anderes als „Fehler“. Ich bin neu in Ajax, so dass ich wahrscheinlich etwas offensichtlich mit Blick auf. Hier ist der relevante Code:

Modell

class Prize(models.Model):
    name = models.CharField(max_length=50)
    quantity = models.IntegerField(default=0)

    def __unicode__(self):
        return self.name


URLconf

urlpatterns = patterns('',
    (r'^get_prize/$', 'app.views.get_prize' ),
)


Ansicht

def get_prize(request):
    prizes = Prize.objects.filter(quantity__gt=0)
    to_return = {}

    if prizes:
            rand = random.randrange(len(prizes))
        prize = prizes[rand]
        prize.quantity -= 1
        prize.save()


        to_return['prize'] = prize.name
        data = simplejson.dumps(to_return)

        return HttpResponse(data, mimetype='application/json')


    else:
        to_return['msg'] = "That's all the prizes.  No more."
        data = simplejson.dumps(to_return)

        return HttpResponse(data, mimetype='application/json')


Vorlage

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>User's Conference Prize Randomizer</title>
<link rel="stylesheet" type="text/css" href="/static-media/style.css" />
<script type="text/javascript" src="/static-media/jquery-1.2.6.min.js"></script>

<script type="text/javascript">
    var get_prize = function() {
        var args = { 
            type: "GET",
            url: "get_prize",
            dataType: "json",
            success: done,
            error: function(response,error_string,e){
                alert( "Error: " + response.responseText + " " + error_string ); 
                for (i in e){
                    alert(i);
                }
            }
        };

        $.ajax(args);
    };

    var done = function(response) {
        if(response)    {
            alert(response);
        }

        else {
            alert("Something boo-booed");
        }
    };

    $(document).ready(function() {
       $("#start").click(get_prize);
     });
</script>

</head >

<body>
        <p><a href="" id='start'>Get Prize</a>, this link isn't working how I'd like.</p>

</body>

War es hilfreich?

Lösung 3

Gute Trauer. Ich hatte gerade return false in der Funktion weggelassen, die den Ajax-Aufruf gemacht. Way n00b zu gehen. :. 0

Andere Tipps

Dies ist nicht genau zu Ihrer Frage, aber wenn Sie versuchen, ein zufälliges Objekt aus der Datenbank zu holen, können Sie dies tun, anstatt:

prize = Prize.objects.filter(quantity__gt=0).order_by('?')[:1]
if prize:
    prize = prize[0]

# Using a slice prevents an exception if the query returns an empty queryset.
# If you're not a fan of LBYL, you could wrap the query in a try...except block instead:

try:
    prize = Prize.objects.filter(quantity__gt=0).order_by('?')[0]
except IndexError:
    # No more prizes pal...done, fini.

Dies ist keine direkte Antwort auf Ihre Frage, aber haben Sie an der jQuery-Plugin taconite geschaut? Es macht die meisten AJAXy Sachen trivial zu tun. Mehr auf malup der taconite . Während Sie gerade dabei sind, Check-out seine andere hervorragende Plugins .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top