2012-04-21 12 views
11

Mein übergeordnetes Ziel ist es, alle Dropdown-Menüs auf einer Seite zusammenzufassen und diese an eine php-Datei zu senden.Senden eines Arrays von Objekten als Ajax Post-Daten?

Im Moment mache ich es in jQuery so, dass ich ein Gesamt-Zeitplan-Array mache und jedes Element, das aktualisiert werden soll, zu diesem Array hinzufüge. So habe ich so etwas wie:

var schedule = []; 
var data = { 
    'user_id' : '12', 
    'day_of_week' : 'Monday', 
    'when' : 'start', 
    'time' : '12 AM' 
} 
schedule.push(data); 
var data = { 
    'user_id' : '13', 
    'day_of_week' : 'Tuesday', 
    'when' : 'end', 
    'time' : '12 AM' 
} 
schedule.push(data); 
// schedule would have two objects in it 

Offensichtlich in Schleifen und und so.

Also, mein Zeitplan Array hat zwei Objekte in diesem Fall.

Nun ist es möglich, dieses Zeitplan-Array als Ajax-Daten zu verwenden? Es funktioniert nicht, wenn ich so etwas tun:

$.ajax({ 
    url: 'http://something.com/ajax', 
    data: schedule, 
    type: 'POST' 
}); 

Aber wenn ich es stattdessen schedule[0] ändern funktioniert es ganz gut, aber nur für das erste, was in dem Zeitplan-Array, offensichtlich.

+0

Entfernen Sie die '' ..schedule ist eine Variable, kein String. Außerdem wird jQuery Ihr Array als JSON-Objekt codieren, das Sie auf dem Server dekodieren müssen. – gpasci

+1

Wenn ich mich nicht irre, ist Schedule kein Array von Arrays. Es ist ein Array von Objekten, da Daten ein Objekt sind. – xbonez

+0

Gibt es einen bestimmten Grund, warum Sie nicht 'type: 'JSON'' verwenden? –

Antwort

3

Stellen Sie sicher, dass Sie die richtige Version von jQuery verwenden. In früheren Versionen mussten Sie einen Stich geben; Neue Versionen verwenden "intelligente Schätzung" auf der data Variable. Sie können jQuery entweder explizit sagen, dass Sie ein JavaScript-Objekt mit dem Parameter dataType übergeben, oder Sie lassen jQuery es herausfinden.

Dokumentation

jQuery.ajax() - http://api.jquery.com/jQuery.ajax/

2

Pass als JSON:

$.ajax({ 
    url: 'http://something.com/ajax', 
    data: {schedule: schedule}, 
    type: 'POST', 
    dataType: 'JSON' 
}); 

Es wäre eine JSON codierte Zeichenfolge an den Server senden, die serverseitige Sprachen analysieren können. (In PHP ist es mit json_decode() getan).

+1

Was übergebe ich zu json_deocde()? $ _POST ['Zeitplan']? – Ben

+0

@Ben: Ja. 'schedule' besteht aus der JSON-Zeichenfolge. – xbonez

+0

So oder so, bekomme ich nichts. Ich habe versucht, 'type: 'POST'' und' type:' JSON'' mit einer Kombination von Daten einzugeben, und ich bekomme immer einen Nullwert. Was könnte falsch sein? Wenn ich eine 'console.log (schedule)' vor dem Ajax-Teil mache, kann ich alle meine Objekte sehen, so dass ich weiß, dass sie da sind. – Ben

11

Das data Attribut sollte ein Objekt sein.

Was können Sie tun, ist dies:

$.ajax({ 
    url: 'http://something.com/ajax', 
    data: {schedule: schedule}, 
    type: 'POST' 
}); 

Also, wenn Sie dies zum Beispiel in PHP erhalten haben Sie $_POST["schedule"]. Das ist genau dasselbe wie in JavaScript.

Ohh ja ich vergessen habe ... haben auch einen Blick auf .serialize() und .serializeArray()!

+0

Die aktuelle jQuery-Dokumentation gibt an, dass es sich um ein Objekt, eine Zeichenfolge oder ein Array handeln kann. –

Verwandte Themen