سؤال

وأنا أحاول تعلم بعض اياكس الأساسي باستخدام جانغو. مشروعي بسيط هو التطبيق الذي يختار عشوائيا Prize من الجوائز المتاحة في قاعدة البيانات، التناقصات كميته، والعوائد prize.name إلى الصفحة.

وأنا باستخدام طريقة مسج ل$ .ajax لسحب هذا الخروج. والشيء الوحيد الذي يعمل هو وظيفة error المحددة في دعوتي $ .ajax، ولكن رسالة خطأ تقول شيئا سوى "خطأ". أنا جديدة على اياكس، لذلك ربما أنا تطل على شيء واضح. هنا هو رمز ذات الصلة:

نموذج

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

و

مشاهدة

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

و

قالب

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

والحزن جيدة. كنت قد غادرت للتو return false في وظيفة التي جعلت الدعوة اياكس. طريقة للذهاب n00b. : 0

نصائح أخرى

لا يرتبط هذا بالضبط على سؤالك، ولكن إذا كنت في محاولة لجلب كائن عشوائي من قاعدة البيانات، يمكنك أن تفعل هذا بدلا من ذلك:

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.

وهذه ليست إجابة مباشرة على سؤالك، ولكن هل نظرت إلى taconite المساعد مسج؟ فهو يجعل معظم الاشياء AJAXy تافهة للقيام به. المزيد من المعلومات عن malup في الصفحة taconite . بينما كنت في ذلك، الخروج له الإضافات الممتازة الأخرى .

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top