![]() |
|
|
|||
|
|
Posting #1 (im Thread / einzeln) |
|
Antarctica
Admiral
Special ![]() Registriert seit: 11.09.2004
Ort: Am Hofe Karls des Großen
Beiträge: 1.980
|
Javascript replace.
Hallo,
ich versuche gerade String-Ersetzen in javascript. Ich sende eine Kommaseparierte Liste von Tags vom Server zum Client. Tags können jedoch Kommata enthalten. Daher werden sie quasi escaped. Der PHP-Teil zum Escapen ist if(isset($_GET['tag'])) $_GET['tag']=str_replace(array(";",","),array(";1",";2"),mysql_real_escape_string($_GET['tag'])); Der Tag wird dann codiert in der Datenbank abgelegt, wann anders dann abgerufen und an die Seite gesendet. Dort soll Javascript dann mittels Text = Text.replace(/;1/g, ",").replace(/;2/g, ";"); den Tag decodieren. Leider funktioniert letzteres nicht so wie es soll. Ich hab auch keine Ahnung wie es richtig geht... |
|
|
Posting #2 (im Thread / einzeln) |
|
Maxefix
Grand Admiral
Special ![]() Registriert seit: 20.01.2003
Ort: Augsburg
Beiträge: 4.588
|
Also am JavaScript kann es schonmal nicht liegen, die Ersetzungen funktionieren. Beispiel:
Code:
'Tag 1;1Tag 2;2Tag 3;1Tag 4;2Tag 5'.replace(/;1/g, ",").replace(/;2/g, ";"); Code:
Tag 1,Tag 2;Tag 3,Tag 4;Tag 5 Warum speicherst du die Tags eigentlich nicht normalisiert in einer eigenen Tabelle? ![]() Gruß, Max |
|
|
Posting #3 (im Thread / einzeln) | ||
|
Antarctica
Admiral
Special ![]() Registriert seit: 11.09.2004
Ort: Am Hofe Karls des Großen
Beiträge: 1.980
|
Das PHP-Script gibt meinetwegen
"Alexander,Test2,Neuer Tag" aus. Das steht dann in request.responseText. Dann kommt Code:
var TextList = request.responseText.split(",");
for(var i=0;i<TextList.length;i++) {
addRow(id,TextList[i]);
}
Code:
function addRow(id,Text) {
Text = Text.replace(/;1/g, ",").replace(/;2/g, ";");
[...] // HTML-Elemente erzeugen
var text = document.createTextNode(Text);
[...] // HTML-Elemente konkatenieren etc.
tbody[id].appendChild(tr);
}
Was in "Text" semantisch drin steht, hängt davon ab, was der Nutzer tut. Beim ersten Aufruf jeder Seite werden die Tags der Seite als kommaseparierte Liste geschickt, beim Anklicken eines Tags die Seiten zu dem Tag. Zitat:
.Zitat:
Ich würde mit meiner bescheidenen Meinung behaupten, dass das Ding rein nach der Theorie sogar in 3-Normalform ist, da ich genau folgendes in der Datenbank ablege: TABLE Socialtags (Tag VARCHAR 128, Page VARCHAR 128, added DATE) Da gibt es keine Redundanz; die Tabelle hat schließlich nur einen einzigen möglichen Schlüssel: (Tag, Page), und das Datum hängt vom ganzen Schlüssel ab (wann wurde der Tag auf der Seite hinzugefügt). . EDIT : . HAHA, Fehler gefunden. LOL Über so viel Dämlichkeit meinerseits kann ich echt nur lachen. Der "Fehler" heißt Browsercache...
|
||
|
|
Posting #4 (im Thread / einzeln) | ||
|
Maxefix
Grand Admiral
Special ![]() Registriert seit: 20.01.2003
Ort: Augsburg
Beiträge: 4.588
|
Zitat:
![]() Zitat:
![]() Gruß, Max |
||
|
|
Posting #5 (im Thread / einzeln) |
|
Ge0rgy
Grand Admiral
Special ![]() Registriert seit: 14.07.2006
Beiträge: 3.872
|
oder als behelf ein Trennzeichen benutzen das ur mit sehr wenig wahrscheinlichkeit in den textfeldern vorkommen wird, wie ein pipe z.B. |
JSON wäre natürlich sehr praktisch. Übrigens kann ich als clientseitiges Helferlein jQuery empfehlen. Manchmal ist das echt unbezahlbar. |
|
|
Posting #6 (im Thread / einzeln) | |
|
Antarctica
Admiral
Special ![]() Registriert seit: 11.09.2004
Ort: Am Hofe Karls des Großen
Beiträge: 1.980
|
Zitat:
Wenn ich mit einem Gerät XML sprechen soll, konkateniere ich mir mein XML als String zusammen (ist viel einfacher als ein Objekt zu basteln) und mach ne Telnet-Verbindung auf... |
|
|
|
Posting #8 (im Thread / einzeln) |
|
N1truX
Vice Admiral
Special ![]() Registriert seit: 06.07.2007
Ort: Berlin
Beiträge: 958
|
Dafür aber wesentlich anfälliger für Code-Einschleusungen. Du kannst via JSON ja auch Funktionen übertragen. Wer es sich leicht macht und das Objekt einfach via eval einbindet hat da schnell ein großes Problem...
|
|
|
Posting #10 (im Thread / einzeln) |
|
Ge0rgy
Grand Admiral
Special ![]() Registriert seit: 14.07.2006
Beiträge: 3.872
|
Ebend.
Und der Jux bei solchen Frameworks ist unter anderem dass man sich nicht um 1000 Eigenheiten gewisser Browser-Versionen kümmern muss. Man kann in einer einzigen Zeile jQuery ein objekt selektieren, jeden kindknoten irgendwie manipulieren (css-klasse o.ä.) und mal eben den ganzen block ausblenden ohne sich mit getAttribute() und nullreference herumschlagen zu müssen, Inkonsistenzen im Event-Objekt sind kein Thema mehr und automatisches Binden von Event-handlern an per ajax neu hinzugefügte Elemente mittels .live() oder .delegate() ist absolut trivial. Dabei ist es völlig unerheblich ob man es mit einem IE 7, 8 oder 9, einem Safari oder einem Firefox zu tun hat. Alle haben ihre Zicken und gerade IE9 ist in eingen Belangen wesentlich strenger als seine Vorgänger und auch zickiger als FF. Man kann sichs natürlich immer schwer machen. Aber bevor man dann XML benutzt, würde ich vorschlagen einfach Base64-Kodierte Rohdaten zu übertragen und in JS zu parsen. XML zusammenstückeln mag bei kleinen APIs noch gehen, wenn man aber gegen Webservices eine BizTalk-Server Programmieren muss und sich mit allen möglichen XML-Namespaces, Custom Types usw. rumschlagen, dann ist jede Form von Frameworke und erleichterung ein Segen! - Schon alleine der Übersichtlichkeit wegen. Ein Komplexer XML-Typ, zusammengesetzt aus 3 anderen komplexen XML-typen, welche ihrerseits wieder aus mindestens 2 XML-Typen bestehen... viel spaß bei den Verschachtelten Schleifen und If-Anweisungen um das alles sauber aneinander zu stückeln.
|