2012-06-24 20 views
9

के माध्यम से django दृश्य को मानों की पासिंग सूची मैं jQuery वेब AJAX कॉल के साथ एक वेब पेज से दूसरे नंबर पर संख्यात्मक मानों (आईडी) की एक सूची पास करने का प्रयास कर रहा हूं। मैं यह नहीं समझ सकता कि सूची में सभी मूल्यों को कैसे पास किया जाए और पढ़ा जाए। मैं 1 मान सफलतापूर्वक पोस्ट और पढ़ सकता हूं लेकिन एकाधिक मान नहीं।jQuery AJAX कॉल

jQuery:: यहाँ क्या मैं अब तक किया है

var postUrl = "http://localhost:8000/ingredients/"; 
$('li').click(function(){ 
    values = [1, 2]; 
    $.ajax({ 
     url: postUrl, 
     type: 'POST', 
     data: {'terid': values}, 
     traditional: true, 
     dataType: 'html', 
     success: function(result){ 
      $('#ingredients').append(result); 
      } 
    });  
}); 

/सामग्री/दृश्य:

def ingredients(request): 
    if request.is_ajax(): 
     ourid = request.POST.get('terid', False) 
     ingredients = Ingredience.objects.filter(food__id__in=ourid) 
     t = get_template('ingredients.html') 
     html = t.render(Context({'ingredients': ingredients,})) 
     return HttpResponse(html) 
    else: 
     html = '<p>This is not ajax</p>'  
     return HttpResponse(html) 
Firebug के साथ

मैं देख सकता हूँ कि पोस्ट दोनों आईडी लेकिन शायद में शामिल गलत प्रारूप (टेरिड = 1 & टेरिड = 2)। तो मेरी सामग्री दृश्य केवल terid = 2 उठाता है। मैं क्या गलत कर रहा हूं?

संपादित करें: स्पष्ट करने के लिए, मैं ourid चर पास मूल्यों की आवश्यकता [1, 2] सामग्री को ध्यान में रखते फिल्टर करने के लिए।

उत्तर

3

मैं अपने मूल समस्या का समाधान पाया होना चाहिए लगता है। इसे यहां एक उत्तर के रूप में पोस्ट करना, उम्मीद है कि यह किसी की मदद करता है।

jQuery:

var postUrl = "http://localhost:8000/ingredients/"; 
$('li').click(function(){ 
    values = [1, 2]; 
    var jsonText = JSON.stringify(values); 
    $.ajax({ 
     url: postUrl, 
     type: 'POST', 
     data: jsonText, 
     traditional: true, 
     dataType: 'html', 
     success: function(result){ 
      $('#ingredients').append(result); 
      } 
    });  
}); 

/सामग्री/दृश्य:

def ingredients(request): 
    if request.is_ajax(): 
     ourid = json.loads(request.raw_post_data) 
     ingredients = Ingredience.objects.filter(food__id__in=ourid) 
     t = get_template('ingredients.html') 
     html = t.render(Context({'ingredients': ingredients,})) 
     return HttpResponse(html) 
    else: 
     html = '<p>This is not ajax</p>'  
     return HttpResponse(html) 
+0

बस एक एफवाईआई - कुछ पुराने ब्राउज़रों में एक JSON लाइब्रेरी अंतर्निहित नहीं है।KISS समाधान के बारे में KISS के लिए 'JSON.stringify' –

0

कोशिश भेजने इस तरह डेटा:

data: values; 
2

यह भाग आपके समस्या है:

ourid = request.POST.get('terid', False) 
ingredients = Ingredience.objects.filter(food__id__in=ourid) 

आप JSON स्ट्रिंग deserialize की जरूरत है।

import json 
ourid = json.loads(request.POST.get('terid')) 
+0

जब मैं ऐसा करता हूं तो मुझे यह त्रुटि AJAX कॉलबैक में मिल रही है: टाइप/एरर/सामग्री/ 'int' ऑब्जेक्ट इट्रेबल – finspin

+0

यह मेरी समस्या हल नहीं हुई है, सबक सीखा है। –

1

यह आप स्ट्रिंग के लिए सरणी सेट कर रहे हैं यहाँ

data: {'terid': values}, 

यह

data: {terid: values} 
+0

अभी भी केवल दूसरा मान उठाया गया है (टेरिड = 2)। – finspin

28

आप request.POST.getlist द्वारा इस सरणी का उपयोग कर सकते ('terid []') में दृश्य

जावास्क्रिप्ट में:

$.post(postUrl, {terid: values}, function(response){ 
    alert(response); 
}); 
view.py में

:

request.POST.getlist('terid[]') 

यह मेरे लिए एकदम सही काम करता है।

+2

+1 बहुत KISS समाधान – andi

+1

+1 के बजाय आप '$ .serialize' का उपयोग करके बेहतर हो सकते हैं। – doniyor

+0

'चयनित = request.GET.getlist ['चयनित []'] TypeError: 'instancemethod' ऑब्जेक्ट में कोई विशेषता नहीं है '__getitem__' 'मुझे यह त्रुटि मिलती है ... लेकिन मेरे पास डंक की एक सरणी है [" एक " , "दो", "तीन"] और 'GET' अनुरोध का उपयोग कर रहा हूं ... – nidHi

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