2011-09-07 133 views
0

我有一個選擇選項列表和一個jstree對象,我想將用戶選擇傳遞給一個django視圖來處理它並獲得響應。我肯定做錯了事,但我不知道如何解決。我可以在調度程序視圖中獲取值,但該模板從不加載,它保留在前一個視圖(生成以下模板的人員)中。將變量傳遞給視圖

<html> 
<body> 
<select id="opt" name="numbers"> 
    <option value="1">1</option> 
    <option value="2">2</option> 
    <option value="3">3</option> 
</select> 

<input id="goButton" value="Go!" class="btn small info" /> 

<div id="demo2" class="demo"> 
    <ul> 
    {% for car_type, cs in cars.items %} 
     <li> 
      <a>{{ car_type }}</a> 
       <ul> 
        {% for c in cs %} 
         <li><a id="{{c.0}}">{{c.1}}</a></li> 
        {% endfor %} 
       </ul> 
     </li> 
    {% endfor %} 
    </ul> 
</div> 
<script> 
    $(function() { 
     $("#demo2").jstree({ 
      ......... 

     function submitMe(){ 
      var checked_ids = new Array(); 
      var car_amount = $("select option:selected").val(); 
      $("#demo2").jstree("get_checked",null,true).each 
       (function (index,value) { 
        if (value.children[2].id) { 
         checked_ids.push(value.children[2].id); 
        } 
       }); 
      var car_ids = checked_ids.join(" "); 
      $.ajax({ 
       type: 'POST', 
       url: "{% url scheduler %}", 
       data: {'car_ids': car_ids, 'car': car_amount}, 
       dataType: "json" 
      }); 
     }; 

     $("#goButton").click(function() { 
      submitMe(); 
     }); 
    }); 
</script> 
</body> 
</html> 

views.py(調度):

def scheduler(request): 

    if request.is_ajax(): 
     c_ids = request.POST['car_ids'].split(" ") 
     cars = request.POST['car'] 
     ....... 

    context = { 
     'cars' : cars, 
    } 
    return render_to_response(
     'scheduler.html', 
     context, 
     context_instance = RequestContext(request), 
    ) 

回答

0

您的視圖返回渲染的模板,但你的阿賈克斯不會用它做任何事情。

如果您只是希望按鈕將用戶帶到新頁面,則根本不應該使用Ajax。只需將這些值放入一個表格中,並使按鈕正常input type="submit"

+0

感謝丹尼爾,正如你在代碼中看到的那樣,我必須在發送它們之前先用這些值做一些事情。我正在考慮使用jquery .submit(),但我不知道如何將它重定向到帶有附加數據的新視圖。 – Rod0n

+0

@rodringo,提交是一種表單方法。你會給你的表單一個動作,當你打電話提交時,它會使用你指定的方法提交給動作url。 Ex'

' – dm03514