2017-06-28 7 views
0

Ich habe versucht, AJAX zu verstehen, und ich schaffe es, einzelne Daten zu senden. Aber wenn ich versuche, ein Array zu senden, geht nichts durch. Ich habe versucht, es als JSON zu formatieren, war aber in dieser Hinsicht nicht wirklich erfolgreich. Ich habe Trough Stack Overflow durch irgendwelche Kombinationen von Tipps und Tricks gesucht haben mich fast den ganzen Weg gebracht.Pass assoziative Array durch Ajax

Hier ist die JS ohne die meisten der Mathematik, die Preise zu erhalten:

var data = []; 

    $('[id$="-subtotal"]').each(function() { 
     subtotal = some_math;   
     id = some_ID_Number; 
     data['id-' + String(id)] = subtotal 
    }); 

    $.ajax({ 
     url: '/test/', 
     type: 'POST', 
     dataType: "JSON", 
     data: { 
     'prices': data, 
     'csrfmiddlewaretoken': $('input[name="csrfmiddlewaretoken"]').val() 
     }, 
     success: function (data) { 

     } 
    }); 

Und ich habe versucht worden, mit dem Array zuzugreifen:

request.POST.get (‘ Preise)

+0

Sie sollten Daten JSon statt Array. Sie können Array nicht an Ajax übergeben –

+1

Das ist nicht korrekt, nach den Dokumenten (http://api.jquery.com/jquery.ajax/) können Sie ein PlainObject oder Array senden, das von AJAX in eine Abfragezeichenfolge konvertiert wird . – Koen

Antwort

1
  1. Sie verwenden nicht $.each() richtig. Versuchen Sie folgendes:

    $ .each ($ ('[id $ = "- Wert Ihrer"]'), Funktion (Taste, Element) { Zwischensumme = some_math;
    id = some_ID_Number; data [ 'ID- '+ String (id)] = Zwischensumme });


  1. Sie sollten data als Objekt deklarieren, kein Array. Ein Array kann nur numerische Schlüssel haben. Ein Objekt kann Schlüssel haben, die andere Zeichen enthalten. Wenn Sie console.log(data) sehen, werden data Daten enthalten, wenn es ein Objekt ist, und leer sein, wenn es als ein Array initialisiert wird. Also versuchen Sie dies:

var data = {}; 
 

 
    $.each($('*'), function() { 
 
    subtotal = Math.random() * 100; 
 
    id = Math.random() * 100; 
 
    data['id-' + String(id)] = subtotal 
 
    }); 
 

 
    console.log(data);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

+0

Das Array wird ordnungsgemäß mit dem ursprünglichen Code erstellt, aber Ihre sieht besser aus. Wenn ich das Array einfach mit 'data = [1, 2, 3] überschreibe, wird es richtig durchgeschickt und ich kann darauf zugreifen. Ich habe Probleme mit einem assoziativen Array, was ich in der Funktion über dem Ajax eingebaut habe. –

+1

Ich habe meine Antwort oben mit einer zweiten möglichen Lösung geändert. – Koen

+0

Das war es, ich musste es JSON zuerst stringifizieren: 'JSON.stringify (Daten)' dann in der Ansicht habe ich einfach das getan: 'test_dict = json.loads (request.POST.get ('Preise')) ' –