2016-12-27 4 views
0

ich eine js Variable haben, die auf einer PHP-Seite durch php generiert wird:Javascript Short Circuit wird nicht den richtigen Wert zurück

<script type="text/javascript"> 
    var shadeData = <?php echo $formattedShadeData; ?>; 
</script> 

Diese Variable wird nur auf einer Seite definiert werden, so möchte ich verhindern andere Seiten werfen beim Laden einen Fehler. In einem meiner Javascript-Dateien, möchte ich ausgeführt, wenn die Variable den Code stoppen ist noch nicht definiert worden, so dass ich versucht worden bin:

var shadeData = shadeData || null; 

if(!shadeData){ return false; } 

Jedoch ist dies nicht funktioniert und ich bin immer noch immer shadeData ist nicht definiert. Es gibt eine Reihe von Funktionen im Code unterhalb dieser Zeilen, die die Variable verwenden. Im Idealfall würde dies jedoch nicht ausgeführt, wenn die zweite Zeile false zurückgibt.

+0

Setzen Sie 'shadeData' auf' null' oder 'false' in Ihrem PHP-Skript. JavaScript ist seltsam mit undefinierten Werten. – www139

+0

Zuerst: Verwenden Sie nicht mehrere 'var' Deklarationen für die gleiche Variable. Zweitens: Wenn Sie eine Variableneingabe über PHP aufrufen, wickeln Sie einfach einen 'json_encode ($ formatedShadeData)' um die PHP-Variable. Dies verhindert Syntaxfehler, wenn '$ formatedShadeData' leer ist. – Tyr

+0

@ ww139 danke, ich werde das versuchen, wenn nichts anderes funktioniert. Mein Instinkt ist es in JS – user3006927

Antwort

1

Sie können return nicht im globalen/obersten Bereich eines JavaScript-Programms verwenden.

Ihre Idee sollte nach einer kleinen Optimierung gut funktionieren: wickeln Sie Ihren gesamten Code in eine IIFE.

// If shadeData is already defined and falsey, this is unnecessary. But included for clarity. 
var shadeData = shadeData || null; 

(function() { 
    if (!shadeData) { 
     return; 
    } 
    // From now on within this function, shadeData is truthy. 
}()); 

// shadeData is not necessarily truthy down here. 
console.log('shadeData:', shadeData); 

In der realen Welt würde dies in der Regel mit einer Haupteingabefunktion erreicht werden (oft genannt init), die bedingt aufgerufen wird.

function init() { 
    // I am only run when shadeData is truthy. 
} 
if (shadeData) { 
    init(); 
} 
+0

zu setzen Danke! Ich versuche die zweite Option, bekomme aber immer noch Schatten. Die Daten sind nicht definiert. – user3006927

+0

Dies wird von der Zeile if (shadeData) ausgelöst. Es scheint, als würde die if-Anweisung den Code nicht beenden – user3006927

+0

Nur 'return' kann den Code" anhalten ". Aber offensichtlich können 'if' /' else' Konstrukte die Bedingungen garantieren, unter denen bestimmter Code läuft. Vielleicht brauchst du einen 'else {}' um deinen Code, der wirft? 'if (shadeData) {} else {codeThatIsThrowing(); } ' –

Verwandte Themen