2010-11-18 7 views
0

Hintergrund:Client Side Web Service

Ich habe eine HTML-Datei, die mehrere Parameter und verwendet Javascript nimmt, um dynamisch die Seite zu machen. Diese Seite extrahiert Daten aus mehreren statischen lokalen XML-Dateien und verarbeitet sie.

Zum Beispiel service.html? ID? 123 kehrt eine Seite speziell für ID-Nummer 123

, das einfach und ist fertig.

Problem:

Ich möchte jQuery Ajax verwenden, um das gerenderte Ergebnis zurück auf die Hauptseite zu ziehen. Derzeit verwende ich etwas wie folgt aus:

$ Schnipsel ({

 type: "GET", 
     url: "service.html?ID?123", 
     success: function(msg){ 
      alert(msg); 
     } 

});

Allerdings gibt dies korrekt meine HTML-Seite zurück, bevor mein Javascript ausgeführt wird. Kann jemand für so etwas über eine Umgehungslösung nachdenken? Ich möchte die resultierenden Daten nicht im übergeordneten Element ausführen.

Mögliche Lösung:

Ich denke, die „Service“ in einem versteckten iframe laufen und haben es auf eine wieder verwendbare statische HTML-Datei schreiben, die ich in über Ajax ziehen kann. Ist so etwas machbar?Nein: Nun, da ich daran denke - ich denke nicht, dass dies eine praktikable Lösung ist, weil die gesamte Verarbeitung im Iframe die Kontrolle über den Javascript-Thread auf der Hauptseite übernehmen würde. Das ist genau das, was ich

bearbeiten zu vermeiden versuchen: Auch Webworker wird nicht wegen der Umgebung arbeiten, die ich bin in (.hta).

+1

@fluorescentLAMP Sollte es nicht "service.html? ID = 123" sein? –

+0

Wenn ich es in eine .php Datei fütterte, dann ja. Wie ich es jetzt habe, analysiere ich die URL-Zeichenkette alleine, also ist es nicht wirklich wichtig. Ich habe erwartet, dass diese Frage aufkommt. – devinpleuler

+0

Was meinst du mit "bevor mein Javascript ausgeführt wird"? Wird es beim Laden der Seite ausgeführt? Wenn nicht, was läuft es? – Zlatev

Antwort

0

Die IFRAME-Lösung sollte funktionieren. Legen Sie einfach eine versteckte IFRAME auf der Seite und dann auf der Seite hinein laden:

$("#the_iframe").attr("src", "service.html?ID?123"); 

, dass der JavaScript-Code im Zusammenhang mit der Seite ausgeführt wird. Dann können Sie diese Seite (sein generated Content) zuzugreifen:

var data = $("#the_iframe").contents().find("#data_container"); 
+0

Jetzt, da ich darüber nachdenke - ich denke nicht, dass dies eine praktikable Lösung ist, weil die gesamte Verarbeitung im Iframe die Kontrolle über den Javascript-Thread auf der Hauptseite übernehmen würde. Genau das versuche ich zu vermeiden. Wenn ich auf dem gleichen Thread verarbeite, könnte ich genauso gut die gesamte Verarbeitung auf derselben Seite machen. Das war ein guter Versuch, du. – devinpleuler

0

Wenn ich verstanden, was Sie brauchen ..

$(function() { 

    $.ajax({ 

      type: "GET", 
      url: "service.html?ID?123", 
      success: function(msg){ 
       alert(msg); 
      } 

    }); 
} 
); 

Wird ausgeführt, dass, wenn alle die Seite geladen wird, aber nicht gerendert. Jedoch wird jeder Elementverweis, der von der Ajax-Erfolgsfunktion stammt, in Ordnung sein.

+0

Was meinst du mit: _ "Allerdings wird jeder Elementverweis aus der Ajax-Erfolgsfunktion in Ordnung sein." _? – devinpleuler