2012-06-12 15 views
5

tutaj jest mój kod:uzyskać javascript tablicy w Django

urls.py:

from django.conf.urls import patterns 
from views import show,showpage 

urlpatterns = patterns('', 
         (r'^$',showpage), 
         (r'^show/$',show), 
) 

views.py

from django.http import HttpResponse 
def show(request): 
    arr = reqeust.GET.get('arr','Nothing') 
    print arr#**it's 'Nothing'** 
    if arr == 'Nothing': 
    msg = 'fail' 
    else: 
    msg = 'pass' 
    return HttpResponse(msg) 

def showpage(request): 
    html = ''' <html> 
<head> 
<script language="javascript" type="text/javascript" src="/site_media/js/jquery-1.7.2.js"></script> 
</head> 
<body> 
<input type="button" id="input_btn"/> 
</body> 
<script language="javascript" type="text/javascript"> 
$(function(){ 
    $("#input_btn").bind("click",function(){ 
    arr = [1,2,3,4,5,6] 
    $.ajax({ 
     type:"GET", 
     url:"/show/", 
     data:{arr:arr},//**I want pass the arr to django** 
     success:function(data){alert(data);}, 
     error:function(data){alert(data);} 
    }); 
    }); 
}) 
</script> 
</html>''' 
    return HttpResponse(html) 

kiedy dostęp localhost: 8000, i kliknij przycisk, mam "Nic" drukowane w konsoli wewnętrznej, jak wiesz, że dostałem komunikat „nie” w frontend

uh..can nikogo sovle tego problemu, chcę uzyskać kod (arr = reqeust.GET.get('arr','Nothing')), która zwraca listę ([1,2,3,4,5,6]) lub coś w tym

------ --- append1 -------

mam to w konsoli po kliknięciu BTN

[12/czerwiec/2012 09:48:44] „GET/show /? arr % 5B% 5D = 1 & arr% 5B% 5D = 2 & arr% 5B% 5D = 3 & arr% 5B% 5D = 4 & tabl% 5B% 5D = 5 & tabl% 5B% 5D = 6 HTTP/1.1" 200 4

--------- apend2 -------

I ustalony mój kod tak:

arr = request.GET.get('arr[]','Nothing') 

i mam 6, który jest ostatnim z javascript tablicy, w jaki sposób mogę uzyskać całą tablicę?

dzięki z góry!

+0

Jak wygląda właściwy URL żądania? –

+0

Przepraszam! Zapomniałem zwrócić stronę html, poczekaj chwilę – sashimi

+0

@Ignacio Vazquez-Abrams Poprawiłem moje pytanie i umieściłem adres URL żądania na dole pytania treść – sashimi

Odpowiedz

10

jQuery zdecydowało się dodać nawiasy kwadratowe do nazwy pola, najprawdopodobniej do PHP. Nie są wymagane dla Django, ale cokolwiek. Zamiast tego uzyskaj dostęp do request.GET['arr[]'] i request.GET.getlist('arr[]').

+0

** request.GET.getlist ('arr []') ** Prace!! i podałem informację o adresie URL żądania ** arr% 5B% 5D = 1 & arr% 5B% 5D = 2 ** EQUALS ** arr [] = 1 & arr [] = 2 ** i ** request.GET ** zwraca ** QueryDict ** dziękuję @Ignacio Vazquez-Abrams^_^ – sashimi

+0

co za wspaniała odpowiedź. –

5

Można również ustawić:

$.ajaxSettings.traditional = true; 

To sprawi jQuery zachowywać się według rzeczywistego standardu HTTP, która działa z Django.

Jest to wymagane, gdy nie masz dostępu do request.GET lub request.POST się (np. Ajax-księgowanie formularza).

Zdecydowanie zaleca się ustawienie tego w przy każdym projekcie django.

+0

dziękuję @jpic tak samo, wypróbuję twoją sugestię i otrzymuję URL żądania w następujący sposób: ** http: //127.0.0.1: 8000/show /? Arr = 1 & arr = 2 & arr = 3 & arr = 4 & arr = 5 & arr = 6 **. Zmieniam ** request.GET.getlist ('arr') **, również działa.dzięki twojemu sugestii ~ – sashimi

Powiązane problemy