2009-07-17 10 views
2

Ich schrieb 2 Seiten, um dieses Problem zu testen, aber der Server Beschwerden Fehler. Ich weiß nicht warum, jeder kann es erklären? vielen Dank.in Coldfusion, Variablen in welchen Umfang kann an und iframe Seite übergeben werden?

dies 1.cfm

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html> 
    <head> 
     <meta http-equiv="Content-type" content="text/html; charset=utf-8" /> 
     <title>Page Title</title> 
    </head> 
    <body> 
     <cfscript> 
      a="aaaaaaaaaaa"; 
      b="bbbbbbbbbbb"; 

      request.r1="rrrrrrr111111111"; 
      request.r2="rrrrrrrr222222222"; 

      session.s1="sssssssssss11111111111"; 
      session.s2="sssssssssss2222222222"; 
     </cfscript> 
     <iframe src="2.cfm" width="600" height="400" name="myframe" scrolling="yes"> 
     </iframe><br /> 
     variables 
     <cfdump var="#variables#"> 
     request 
     <cfdump var="#request#"> 
     session 
     <cfdump var="#session#"> 
    </body> 
</html> 

und das ist 2.cfm

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html> 
    <head> 
     <meta http-equiv="Content-type" content="text/html; charset=utf-8" /> 
     <title>2.cfm</title> 
    </head> 
    <body> 
     variables 
     <cfdump var="#variables#"> 
     request 
     <cfdump var="#request#"> 
     session 
     <cfdump var="#session#"> 
    </body> 
</html> 
+0

Die Antwort hier zur Verfügung gestellt wurde, so dass Sie alle gut sind, aber in Zukunft, wenn Sie einen Fehler, anstatt zu sagen: „Es ist ein Fehler aufgetreten“, Es ist hilfreicher, die tatsächliche Fehlermeldung anzugeben. Manchmal ist es nicht so offensichtlich, was falsch ist, wie es dieses Mal war - und das ist schwer zu erraten - also immer am besten, so viele relevante Informationen wie möglich zur Verfügung zu stellen. Prost. –

Antwort

8

Es scheint, als ob Sie ein grundlegendes Konzept von Webseitenanforderungen missverstehen.

Ein Iframe, obwohl als Teil der Rendering-Seite angezeigt, ist in der Tat eine eigene Anfrage, vollständig getrennt von der ursprünglichen Seitenanforderung.

Sitzungsvariablen würden zwischen den beiden geteilt werden (vorausgesetzt, Sie haben Sitzungen in Application.cfm/Application.cfc aktiviert), und obwohl es unwahrscheinlich ist, dass Sie in eine Race-Bedingung geraten, indem Sie Variablen von einer übergeordneten Seite setzen (1.cfm) und lesen sie von einer Kindseite in einem iframe (2.cfm), es ist einfach keine gute Idee (Best Practice).

Anforderungsvariablen, die auf der übergeordneten Seite (1.cfm) gesetzt sind, werden nicht für die Seite im iframe (2.cfm) verfügbar sein, da es sich um eine separate Anfrage handelt.

Wie der Request-Bereich für jede Anforderung privat ist (aber für alle Vorlagen und Objekte freigegeben), ist der Bereich "Variablen" für jede Vorlage privat (wird jedoch bei Verwendung von cfinclude gemeinsam verwendet).

Während Ihr iframe einen eigenen Zugang zum Anfrage und Variablen Bereiche haben, werden sie nicht den gleichen Umfang wie die Originalseite sein (1.cfm).

Dies ist ein ziemlich grundlegendes Konzept der Programmierung im Allgemeinen und auch von ColdFusion. Wenn Sie es schwierig finden, es zu begreifen, sollten Sie sich eine Kopie des ColdFusion Web Application Construction Kits zulegen, mit der Sie relativ schnell von Anfänger bis Anfänger lernen können.

1

Haben Sie eine Application.cfm im Verzeichnis du bist diese Tests durchführen?

Wenn Sie die folgende Zeile in eine Datei namens Application.cfm und das Stammverzeichnis des Verzeichnisses hinzufügen, sollte es funktionieren.

<cfapplication name="test_app" sessionmanagement="true"> 

Getestet habe ich Ihre zwei Dateien und ohne Application.cfm es brach, damit es funktioniert gut präsentieren.

0

Ich denke, Ian ist hier mit seiner Beobachtung auf dem richtigen Weg, dass Session-Variablen zu verwenden, muss man Session-Management aktiviert haben, aber ich denke, mit Application.cfm für dieses ist ein bisschen anachronistisch.

Wenn eine Version von CF ab CFMX7 verwendet wird, empfiehlt sich die Verwaltung des Anwendungsframeworks über die Anwendung.cfc, und das entspricht würden Ians Code sein:

<cfcomponent> 

    <cfset this.name = "test_app"> 
    <cfset this.sessionManagement = true> 

</cfcomponent>