Ergebnis 1 bis 5 von 5

Thema: jQuery AJAX mit dataType 'json' macht Probleme bei der Ausgabe

  1. #1
    Benutzer
    Registriert seit
    22.03.2009
    Beiträge
    87

    Standard jQuery AJAX mit dataType 'json' macht Probleme bei der Ausgabe

    hallo leute,

    ich habe ein Problem mit der Ausgabe der per jQuery AJAX Request angeforderten Daten. Dabei fordere ich 2 größere HTML Container JSON encodiert vom Server an. Einmal eine Liste mit mehereren Li-Elementen und dann ein Embed-Element. Da ich mit der getJSON() Variante von jQuery irgendwie nicht zurecht komme, gehe ich diesen Weg (innerhalb von Joomla!):
    Javscript:
    PHP-Code:
    jQuery.ajax({
       
    type'POST',
       
    url'index.php',
       
    data: {'option':'com_mycom','task':task,'format':'raw'},
       
    dataType'json',
       
    successreplace
    }); 
    Server:
    PHP-Code:
    $response = array();
    $response['player'] = // hier wird der generierte Embed-Code zugewiesen
    $response['list'] =  // hier wird die generierte Liste zugewiesen
    if (function_exists ('json_encode')) {
       echo 
    json_encode ($response);

    Zuvor hatte ich immer nur die Liste angefragt und dabei im Javascript als dataType: 'html' genommen. Damit klappte es prima. Nun aber kommt die Liste nicht als HTML-Code zurück bzw. nicht so wie er sein soll sondern mit zig Escape-Sequenzen drin, trotz des gesetzten dataType: 'json'. Der schaut dann so aus:
    HTML-Code:
    {"player":"<object classid=\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\" id=\"myplayer\" name=\"myplayer\" width=\"585\" height=\"400\">\r\n\t\t ...
    In der Callback Funktion rufe ich dann die jeweiligen Ziel-Container und weise ihnen den Output so zu:
    Javascript:
    PHP-Code:
    jQuery('#playerwrapper').fadeOut(100, function(){
       
    jQuery('#playerwrapper').empty().html(msg.player).fadeIn(300);
    });


    jQuery('#listwrapper').fadeOut(100, function(){
       
    jQuery('#playerwrapper').empty().html(msg.list).fadeIn(300);
    }); 
    Schlimmer ist noch, dass er Output bei diesen Aufrufen (msg.list bzw. msg.player) nur in Firebug zu sehen ist, nicht aber ins Dokument eingefügt wird, wenn ich nur die Liste ausgeben lassen will und statt html(msg.list) nur html(msg) aufrufe, erscheint der obige Code wenigstens im Dokument.

    Ich weiß nicht, was ich falsch mache. Könnt ihr mir weiterhelfen?

    Gruß, Clubnite

  2. #2
    Moderator Avatar von mikdoe
    Registriert seit
    18.01.2009
    Beiträge
    2.199

    Standard

    Habe das hier dazu gefunden: SELFHTML Forumsarchiv / 2007 / Januar / JSON parsen Problem mit Form-Tag

    Scheint ein bißchen mit der JSON Klasse in PHP zu tun zu haben.
    Vielleicht ist im Thread trotzdem ein Tipp für Dich dabei, z.B. der mit "htmlentities()" ?

    Auf dieser Seite fast ganz unten wird darauf auch eingegangen: JSON - Forum: phpforum.de

    Ob das allerdings alles mit jQuery passt, weiß ich nicht, ich nutze das nicht.
    Geändert von mikdoe (16.04.2010 um 18:20 Uhr)
    ich liebe JS und Ajax wenn es crossbrowsertauglich ist

  3. #3
    Benutzer
    Registriert seit
    22.03.2009
    Beiträge
    87

    Standard

    hallo mikdoe,

    danke für deinen Beitrag und die Links. Die htmlentities() Encodierung der Daten auf der Serverseite schafft leider keine Abhilfen. Zwar kommen die HTML-Elemente codiert an, aber JS stellt sie dadurch auch nicht anders dar bzw. überhaupt nicht. Ich frage mich langsam, ob JSON nicht dafür vorgesehen ist, HTML zu transportieren und wie ich es anstellen soll, 2 unabhängige HTML-Blöcke in einer Antwort zu schicken und per Javascript an 2 verschiedenen Stellen wieder im Dokument ausgeben zu lassen.

  4. #4
    Moderator Avatar von mikdoe
    Registriert seit
    18.01.2009
    Beiträge
    2.199

    Standard

    Vielleicht könnte man ein Zeichen als Trenner verwenden, dass im Inhalt garantiert nicht vorkommen kann? Ich verwende z.B. gern das More | für derartige Dinge wo ich JSON für oversized halte.
    Und dann im JS mit .split ('|') wieder in zwei Teile zerlegen. Das nutze ich an vielen Stellen und bin sehr zufrieden damit.
    ich liebe JS und Ajax wenn es crossbrowsertauglich ist

  5. #5
    Moderator Avatar von narkaT
    Registriert seit
    26.06.2007
    Beiträge
    2.411

    Standard

    Der JSON-String ist schon korrekt, wahrscheinlich gab es damals (2007) einen
    Bug in der JSON-Implementierung des PHP-Teams.

    Ich werwende JSON übrigens in einigen Projekten ebenfalls um unter anderem
    HTML-Code zu Transportieren, an der PHP-Funktion liegt es also nicht.


    lass dir doch mal 'msg' mit console.log() ausgeben.

    MfG
    Jan

Ähnliche Themen

  1. Antworten: 2
    Letzter Beitrag: 17.08.2009, 10:08
  2. Mootools JSON Request macht Probleme
    Von web20machtallesneu im Forum JavaScript
    Antworten: 18
    Letzter Beitrag: 15.07.2009, 14:56
  3. jquery - bei load komische php ausgabe ?
    Von Leonid im Forum Programmbibliotheken
    Antworten: 4
    Letzter Beitrag: 24.04.2009, 13:46
  4. Antworten: 0
    Letzter Beitrag: 14.03.2009, 15:37
  5. Objekt macht Probleme
    Von Phill im Forum JavaScript
    Antworten: 5
    Letzter Beitrag: 21.08.2007, 12:11

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •