2012-06-12 5 views
5

hier ist mein Code:in der JavaScript-Array erhalten 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) 

, wenn ich Zugriff auf localhost: 8000, und klicken Sie auf die Schaltfläche, ich habe 'Nichts' in der Backend-Konsole gedruckt, wie Sie wissen, ich bekam Nachricht

uh..can jemand sovle dieses Problem im Frontend 'nicht bestanden', möchte ich den Code erhalten (arr = reqeust.GET.get('arr','Nothing')), die eine Liste ([1,2,3,4,5,6]) oder so etwas wie dieses

zurückkehren ------ --- append1 -------

ich habe dies in der Konsole, wenn ich die BTN klicken

[12/Jun/2012 09.48.44] „GET/show /? arr % 5B% 5D = 1 & arr% 5B% 5D = 2 & arr% 5% 5D = 3 & arr% 5% 5D = 4 & arr% 5B% 5D = 5 & arr% 5B% 5D = 6 HTTP/1.1" 200 4

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

I fixed mein Code wie folgt aus:

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

und ich habe 6, die die letzte der JavaScript-Array ist, wie kann ich die ganze Reihe bekommen?

danke im voraus!

+0

Wie sieht die tatsächliche Anforderungs-URL aus? –

+0

Entschuldigung! Ich vergesse die HTML-Seite zurück, warten Sie eine Minute – sashimi

+0

@Ignacio Vazquez-Abrams Ich reparierte meine Frage und ich legte die Anfrage URL am Ende der Frage Inhalt – sashimi

Antwort

10

jQuery hat beschlossen, dem Feldnamen eckige Klammern hinzuzufügen, die höchstwahrscheinlich PHP enthalten. Sie werden nicht für Django benötigt, aber was auch immer. Greifen Sie stattdessen auf request.GET['arr[]'] und request.GET.getlist('arr[]') zu.

+0

** request.GET.getlist ('arr []') ** funktioniert !! und ich habe Informationen über die Anfrage URL gesendet ** arr% 5B% 5D = 1 & arr% 5B% 5D = 2 ** EQUALS ** arr [] = 1 & arr [] = 2 ** .und die ** request.GET ** gibt zurück ** QueryDict ** danke @Ignacio Vazquez-Abrams^_^ – sashimi

+0

was für eine großartige Antwort. –

5

können Sie auch festlegen:

$.ajaxSettings.traditional = true; 

Dies wird jQuery entsprechend dem aktuellen HTTP-Standard verhalten, die mit Django funktioniert.

Dies ist erforderlich, wenn Sie nicht auf request.GET oder request.POST selbst zugreifen (dh Ajax-Buchung eines Formulars).

Es wird definitiv empfohlen, dies in alle Django-Projekt zu setzen.

+0

danke @jpic egal, ich versuche deinen Vorschlag und ich bekomme die Anfrage URL wie folgt: ** http: //127.0.0.1: 8000/show /? Arr = 1 & arr = 2 & arr = 3 & arr = 4 & arr = 5 & arr = 6 ** Ich ändere ** request.GET.getlist ('arr') **, ich arbeite auch.Danke deine Suggestion ~ – sashimi

Verwandte Themen