2011-05-09 21 views
6

मैं jQuery ट्यूटोरियल (Link) पर काम कर रहा हूँ, लेकिन खंड पर अटक गया है, "दर ME: उपयोग AJAX"

jQuery:

$(document).ready(function() { 
    // generate markup 
    $("#rating").append("Please rate: "); 

    for (var i = 1; i <= 5; i++) 
    $("#rating").append("<a href='#'>" + i + "</a> "); 

    // add markup to container and apply click handlers to anchors 
    $("#rating a").click(function(e){ 
    // stop normal link click 
    e.preventDefault(); 

    // send request 
    $.post("/vote", {rating: $(this).html()}, function(xml) { 
     // format and output result 
     $("#rating div").html(
     "Thanks for rating, current average: " + 
     $("average", xml).text() + 
     ", number of votes: " + 
     $("count", xml).text() 
     ); 
    }); 
    }); 
}); 

urls.py:

urlpatterns = patterns('', 
    (r'^rating/$', 'ajax_rating.views.rating'), 
    (r'^vote/$', 'ajax_rating.views.vote'), 
) 

views.py:

@csrf_exempt 
def vote(request): 
    if request.is_ajax(): 
     rating = request['rating'] 
     f = open('ratings.dat', 'w') 
     votes = json.load(f) 
     votes.append(rating) 
     f.close() 
     dict = {} 
     total_rating = sum(votes) 
     dict['count'] = len(votes) 
     dict['avg'] = total_rating/dict['count'] 
     return HttpResponse(serializers.serialize('xml', dict), 'application/xml') 
    else: 
     return HttpResponse(status=400) 

असल में, एचटीएमएल उपयोगकर्ता को 1 से 5 (कक्षा = रेटिंग के साथ एंकर) के बीच एक विकल्प बनाने के लिए प्रदान करता है। एक बार एक विकल्प क्लिक करने के बाद, #rating div सर्वर से लौटाए गए गणना के परिणाम से ताज़ा हो जाएगा।

समस्या: जब मैं किसी विकल्प पर क्लिक करता हूं तो मुझे "HTTP 500 आंतरिक सर्वर त्रुटि" मिल रही है। अनुरोध फ़ंक्शन को हिट करने से पहले भी त्रुटि होती है, वोट (अनुरोध)। मैंने यह पता लगाने की कोशिश की है कि त्रुटि क्यों है लेकिन इसमें कोई सुराग नहीं है। मुझे नहीं लगता कि सीएसआरएफ के साथ इसका कोई संबंध नहीं है क्योंकि मैं व्यू फ़ंक्शन पर @csrf_exempt का उपयोग कर रहा हूं और MIDDLEWARE_CLASSES से 'django.middleware.csrf.CsrfViewMiddleware' निकाल लिया है।

कृपया आप विशेषज्ञों

+0

आप को देखने के लिए 500 क्या है डिबग मोड को चालू कर सकते हैं: या, सुरक्षित ताकि आप और भी अधिक प्रमुख त्रुटियों फेंक नहीं है होना करने के लिए? –

+0

डीबग मोड पहले से ही है। लेकिन, किसी भी तरह, पृष्ठ बस वही रहता है। – tamakisquare

+0

यदि आप क्रोम में एफएफ या डेवलपर टूल्स में फायरबग का उपयोग करते हैं, तो आप आमतौर पर 500 प्रतिक्रियाओं का पता लगा सकते हैं कि यह क्या कहता है। कंसोल में उस पर क्लिक करने का प्रयास करें। –

उत्तर

6

ratingrequest पर मान्य कुंजी नहीं होगी। आप शायद request.POST['rating'] देख रहे हैं।

rating = request.POST.get('rating', None) 
if rating is None: 
    return HttpResponse(status=400) ## or some error. 
22

को ~~ धन्यवाद मदद मेरा मानना ​​है कि पोस्ट URL /vote/ और न सिर्फ /vote के पास जाना चाहिए।

+0

ने कोशिश की लेकिन उसे वही मिला। – tamakisquare

+2

इस उत्तर के लिए धन्यवाद, इससे मुझे 500 त्रुटि के साथ मदद मिली जो मुझे घंटों तक मिल रही थी। जिज्ञासा से, किसी भी विशेष कारण POST को एक स्लैश के साथ समाप्त होने वाले यूआरएल की आवश्यकता है? आपकी पूरी कॉल काम नहीं करने के लिए एक मूर्ख चीज की तरह लगता है। – Nitrex88

+0

मुझे यह वही समस्या थी। 'Www.example.com/data' पर एक POST अनुरोध भेजना काम नहीं कर सका और HTTP 500 लौटा, लेकिन 'www.example.com/data /' HTTP 200 लौटने में समस्या को ठीक कर दिया। –

संबंधित मुद्दे