• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

[FRAGE] ko.observableArray() für PHP $_POST aufbereiten

reinhhardp

New member
Hallo Allerseits,

ich versuche nun schon seit Tagen ein ko.observableArray() so aufzubereiten das es mittels PHP in eine MySQL Datenbank zurück gespeichert werden kann.

Im ko.observableArray() steht folgendes:

koarray.jpg

Nun soll so etwas wie
{ 'id': '1', 'Name' : 'Ball for the dog', ... }
entstehen.

Kann mir bitte jemand dabei helfen!
Oder wie ist es in PHP auch möglich das ko.observableArray() direkt zu verarbeiten?

Danke,
Reinhard
 
Ist das Problem jetzt damit gelöst? Wenn ja: zeig' doch bitte hier noch den Code, damit kommende Suchende auch etwas davon haben.
 
das Problem ist noch nicht gelöst. Aber ich denke das ich die knockout Variable direkt übergeben kann.

Begründung: Die Ausgabe von $_POST in PHP ist das was ich erwartet habe. Und ich kann auch auch mitttels $_POST['Name'] auf den Wert für "Name" zugreifen.

Aber da ich in PHP kein Experte bin wird es noch einige Zeit dauern bis ich es verifiziert habe.
Grob gesagt übergebe ich an PHP nur die Daten die geändert wurden. Dazu verwende ich das event binding von knockout.

Code:
<input class="writeable" id="tabletext" type="text" data-bind="name: name, value: value, event: { change: $parent.changed }"  />

$parent.changed ist die Funktion die aufgerufen wird und die Variable self.changedattributes = ko.observableArray(); befüllt.


Grüße,
Reinhard
 
Über $.ajax.

Der save button:

Code:
<button class="defaultobjecteditorhtmlsave" id="defaultobjecteditorhtmlsave" type="button" data-bind="click: save">Save</button>

data-bind="click: save" ruft die JS Funktion save auf.

In der Funktion save wird dann $.ajax mit den Parametern
Code:
url: url,
type: 'post',
data: data,
success: function( data, textStatus, jQxhr ){
	self.changedattributes.removeAll();
},
error: function( jqXhr, textStatus, errorThrown ){
console.log( errorThrown );
}

aufgerufen.
Der Parameter data ist dann self.changedattributes();.

Code:
var data = self.changedattributes();

Die komplette save Funktion:
Code:
	self.save = function(event, data)
	{
		self.writeable(false);
		var data = self.changedattributes();
		if(data.length == 0) { return 0; }
		var getid = self.attributes();
		var id;
		for (i = 0; i < getid.length;i++)
		{
			var x = getid[i];
			if(x.type == 0)
			{
				id = x.value;
			} 
		}
		var php = self.links()[0].php;
		var url = '/php/'+php+'?filter='+id;
		$.ajax({
			url: url,
			type: 'post',
			data: data,
			success: function( data, textStatus, jQxhr ){
				self.changedattributes.removeAll();
			},
			error: function( jqXhr, textStatus, errorThrown ){
				console.log( errorThrown );
			}
		});		
	}

Ich weiß das könnte man auch besser machen, aber es geht mir z.Z. um die Funktionalität.

Grüße,
Reinhard
 
Zuletzt bearbeitet von einem Moderator:
Das sieht jetzt aber nicht mehr wie knockoutjs sondern eher wie jQuery aus. Das würde ich dann an sich gern separieren, wenn das zutrifft.
 
Ah... du sendest nicht das Objekt selber, sondern self.changedattributes(). Wenn du dir das in der Konsole anschaust, wird das wahrscheinlich wie ein normales JS-Objekt aussehen, mit dem dann jQuery umgehen kann.

PS: Ist dein Problem jetzt eigentlich gelöst?
 
Zurück
Oben