2016-03-30 18 views
0

Ich habe eine Testseite mit der Syntax unten, die auf einem Desktop funktioniert, aber scheint nicht mit mobilen Geräten zu arbeiten und gibt einen 500 internen Serverfehler zurück. Irgendwelche Ideen, wie ich das korrigieren kann?Dynamische Include-Datei basierend auf der Bildschirmgröße funktioniert nicht

<html> 
<head> 
<SCRIPT LANGUAGE="JavaScript"> 
<!-- Begin 
var xy = navigator.appVersion; 
xz = xy.substring(0,4); 
document.cookie = "ScreenWidth=" + screen.width 
document.cookie = "ScreenHeight=" + screen.height 
// End --> 
</script> 
</head> 
<body> 
<% 
'Declare variables 
Dim strScreenWidth 
Dim strScreenHeight 
'Read the cookies with the width and height 
strScreenWidth = Request.Cookies("ScreenWidth") 
strScreenHeight = Request.Cookies("ScreenHeight") 
%> 
<% If strScreenWidth > 748 Then %> 
    <!--#include file="alpha-inc1.asp"--> 
<% Else %> 
    <!--#include file="alpha-inc2.asp"--> 
<% End If %> 
</body> 
</html> 
+0

Was sagt Ihr Serverprotokoll dazu? –

+0

@AnsgarWiechers: Es ist irrelevant, was seine Serverprotokolle sagen. Er versucht bedingte includes in asp zu machen, die einfach nicht so funktionieren. – Martha

+0

Mein bedingter enthält funktioniert perfekt, wie ich auf jedem Desktop-Computer erwähnt. Ich habe Windows, Linux und in mehreren Browsern verwendet. Funktioniert perfekt. Ich bin mir jedoch nicht sicher, was beim Zugriff auf die Seite eines mobilen Geräts passiert. Wenn Sie meinen Code kopieren und hinterlegen und ein paar einfache Include-Seiten erstellen, werden Sie feststellen, dass er zumindest in der alten herkömmlichen PC-Umgebung funktioniert. Folglich muss jetzt alles mobil sein und es besteht ein größerer Bedarf, die für den Endanwender optimalen Seiten zu erstellen. – MrTKO

Antwort

1

tl; dr: Es funktioniert nicht auf diese Weise. #include Direktiven werden von IIS verarbeitet, lange bevor ASP-Code ausgeführt wird.

Lange Antwort: Egal, wie viele <%if...then%> Anweisungen, die Sie Ihre #include Richtlinien setzen um, wird das Endergebnis sein, dass alle der Dateien aufgenommen werden, da die von IIS verarbeitet enthält, nicht durch ASP, und passieren lange bevor irgendein Code so viel wie geparst wird. Wenn Sie möchten, dass Ihr Code auswählt, ob der Code in Datei A oder Datei B ausgeführt werden soll, müssen Sie einen eigenen Pseudo-Include-Prozess schreiben.

Am einfachsten ist es, bedingte Includes zu vergessen und stattdessen Ihren Code in Subroutinen zu setzen, die Sie bedingt aufrufen können.

Wenn Sie den Code unbedingt in separate Dateien trennen müssen, können Sie den Inhalt der entsprechenden Datei als eine lange Zeichenfolge einlesen, die Sie dann Execute eingeben können. Dies erfordert, dass die Datei 100% ausführbaren ASP-Code enthält, ohne <% %> Tags oder HTML. Siehe How to implement conditional includes in ASP using VBScript.

+0

Danke für den Link und ich lese das jetzt. Ich bin immer noch ein wenig perplex darüber, wie es funktioniert, wenn es nicht so ist. Zugegeben, es funktioniert nur auf Desktop-Computern. Ich habe gerade diesen Code noch einmal getestet und für den Datensatz gibt es nur 1 Datei auf der Seite, die gerendert wird. Ich kann die Liste auf 20 includes erhöhen und es funktioniert immer noch auf einem Desktop-Rechner und enthält nur 1 Datei. – MrTKO

+0

Meine Agenda besteht darin, diese Clientseite zu erstellen, die in VBSCRIPT geschrieben ist und verschiedene Inhalte für mobile Geräte für eine bessere UX bereitstellt. Ich muss die Breite und/oder Auflösung greifen, um optimierte Inhalte zu liefern. – MrTKO

+0

Ich glaube nicht, dass es möglich ist, dass es nur eine Datei enthält. Versuchen Sie, die Bedingung umzukehren, d. H. Setzen Sie "alpha-inc1.asp" in die "Else". – Martha

Verwandte Themen