2009-03-23 8 views
7

Ist es möglich (und browserübergreifend unterstützt), ein Bild in das XML einer AJAX-Antwort einzubetten und dieses Bild dann mit JavaScript zu laden?Ein Bild in eine AJAX-Antwort einbetten

Ich habe ein System, das einige Berechnungen basierend auf der Anzahl der Sitzungen durchläuft. Die Ergebnisse werden grafisch dargestellt und in zwei Teilen zurückgegeben:

1) XML, das Informationen zu den Graphen, Summen und Bilddaten enthält und es dem Benutzer ermöglicht, auf relevante Bereiche zu klicken.

2) Das Grafikbild.

Da sich die Daten zwischen den beiden Anfragen ändern können (und die Berechnung könnte teuer sein), würde ich es lieber in einer einzigen Anfrage machen (gebe das Bild mit dem XML zurück). Die aktuelle Implementierung speichert die Statistiken für einen kleinen Zeitraum, sodass die Ergebnisse mehrerer Anforderungen immer noch übereinstimmen. Da die Menge an Daten, die zwischengespeichert werden muss, von 2,5K auf 1,2 MB steigen wird, möchte ich eine alternative Methode ausprobieren.

HINWEIS: Ich möchte keine integrierten b64 PNG-Bilder verwenden, da sie nicht in IE unterstützt werden.

+0

Gute Frage. Ich hoffe, dass jemand weiß, wie man das macht, aber ich bin pessimistisch. – erikkallen

Antwort

3

Da dies wie mehr Arbeit scheint, dass es wert ist, habe ich beschlossen, dass eine einfachere Lösung wäre:

1) Daten senden XML an den Client mit den Details von dem, was grafisch dargestellt werden soll.

2) Der Client sendet eine Anforderung für das Bild, einschließlich der zu zeichnenden Daten (ähnlich der Google Chart API).

Dies entkoppelt das Diagramm-Rendering von den Daten und kann in Zukunft verwendet werden, um generische Diagramme für andere Datensätze zu generieren. Der andere Vorteil besteht darin, dass keine serverseitige Cachierung erforderlich ist, da nur eine Anforderung verwendet wird.

3

Können Sie das Bild nicht auf dem Server speichern und die URL an den Client senden?

+0

Er versucht, diese Route zu vermeiden, da die Größe der zwischengespeicherten Bilder gleich aufspringen wird. –

+0

Das ist eine Option, aber ich möchte Code vermeiden, um Dateiverwaltung zu handhaben. – jthompson

0

Wenn das Speichern keine Option ist. Erstellen Sie ein Bild im Speicher und spülen Sie die binären Bilddaten zur Antwort von einem Skript, wie einer PHP-Datei. Verwenden Sie einfach die richtige Kopfzeile:

Content-type: image/png 

Das Bild wird jedes Mal neu generiert.

Um absolut sicher zu sein, dass das Bild nicht zwischengespeichert wird, fügen Sie einen zufälligen Parameter an die Querystring an.

+0

Das Bild wurde bereits im Speicher erstellt und auf diese Weise gesendet. Ich versuche, einige XML-Daten mit dem Bild zu integrieren. – jthompson

+0

Hm Ich sehe, wenn Base64 keine Option ist, sehe ich keine Lösung ... –

0

Sie könnten das Bild an den Ajax-Client zurückgeben und dann die XML-Daten in eine X-HTTP-Header für das Bild einfügen.

Aber Sie müssen herausfinden, ob es möglich ist, den X-Header vom Ajax-Client zu lesen.

2

Sie können diese link überprüfen, um zu sehen, ob dieses Konzept funktioniert. Diese link ist vielleicht nützlich.

Ich denke, versuchen, beide Datensätze im XML zu kombinieren wäre interessant.

1

Nun actually you can aber es wird es wahrscheinlich nicht wert sein.Es scheint, als ob eine vektorbasierte Methode wie Canvas und die VML alternatives for IE eine bessere Alternative zum Rendern von Graphen wäre. Dann müssen Sie die Grafikdaten nur an den Browser übergeben.

Verwandte Themen