2009-07-24 10 views
0

Ich habe eine Admin-Seite für ein Geschäft, in dem ein Benutzer Artikeldaten ändern kann. Ich versuche, etwas für den Administrator zu implementieren, um Bilder hinzuzufügen und zu entfernen, indem Sie sie zu und von einem div ziehen.Wie schreibt man verschachtelten JSON mit JQuery?

kann ich die Daten nur gut vorlegen, bis ich die „Bilder“ Objekt in den Mix wie folgt:

$("#saveButton").click(function() { 
    $("form *, button").attr("disabled", "true"); 
    formData = $("#itemForm").formHash(); 
    formData["item"] = $("#itemSelector option:selected").val(); 
    formData["action"] = "save"; 
    formData["images"] = {}; 
    $("#otherImages img").each(function(i){ 
     formData["images"][i] = $(this).attr("src"); 
    }); 
    $.ajax({ 
     type: "POST", 
     url: "adminajax.php", 
     data: formData 
    }); 
}); 

Hier wird die „Bilder“ Wert als eingereicht wird „[object Object]“.

Ich möchte "Bilder" ein assoziatives Array auf dem Server sein.

Eine Problemumgehung besteht darin, einfach mehrere Bildschlüssel zu haben: "image1: source", "image2: source" etc, aber es wäre wirklich nett, wenn es ein Objekt wäre, damit ich ein for-each machen kann "Bilder" statt die Schlüsselzeichenfolgen zu filtern.

+0

Können Sie schießen mehrmals statt? IMO, es ist besser, eine atomare Operation zu haben. –

Antwort

2

Lesen Sie die Dokumentation auf der data Möglichkeit .ajax Anfragen $:

Wenn Wert ist ein Array, jQuery mehrere Werte mit demselben Schlüssel dh serialisiert {foo: [ "bar1", "bar2"]} wird '& foo = bar1 & foo = bar2'.

formData['images'] = $.map($("#otherImages img"), function(i) { 
    return $(i).attr("src"); 
}); 

Oder, wenn Sie PHP verwenden, würden Sie stattdessen dies als die Zuordnung zu tun haben:

So könnte Ihr Beispiel geschrieben werden

formData['images[]'] = ...; 
+1

Großartig, funktioniert wunderbar. –

Verwandte Themen