Django, jQuery, ошибка XMLHttpResponse - PullRequest
0 голосов
/ 11 мая 2009

Я пытаюсь выучить некоторый базовый Ajax, используя Django. Мой простой проект - это приложение, которое случайным образом выбирает Prize из доступных призов в базе данных, уменьшает его количество и возвращает prize.name на страницу.

Я использую метод jQuery $ .ajax для этого. Единственное, что работает, это функция error, определенная в моем вызове $ .ajax, но в сообщении об ошибке ничего не говорится, кроме "ошибки". Я новичок в AJAX, поэтому я, вероятно, пропускаю что-то очевидное. Вот соответствующий код:

Модель

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

    def __unicode__(self):
        return self.name


привязки

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


View

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')


Template

<!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>

Ответы [ 3 ]

1 голос
/ 12 мая 2009

Это не совсем связано с вашим вопросом, но если вы пытаетесь получить случайный объект из базы данных, вы можете сделать это вместо этого:

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.
0 голосов
/ 12 мая 2009

Хорошее горе. Я только что опустил return false в функции, которая сделала вызов ajax. Путь к N00B. : 0

0 голосов
/ 11 мая 2009

Это не прямой ответ на ваш вопрос, но вы смотрели на плагин jQuery taconite? Это делает большинство вещей AJAXy тривиальными. Больше на странице таконита Малупа . Пока вы в этом, проверьте его другие отличные плагины .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...