2016-04-28 3 views
0

Dies funktioniert, schließlich ist es ein Syntaxfehler, aber ich frage mich, wie könnte man dies tun, so dass die Syntax korrekt ist.Syntaxfehler bei der Ausgabe von PHP zu Javascript

Der folgende Code ist Teil eines Skripts, das Variablen vorbereitet, die bei einem Ajax-Aufruf gesendet werden. Daher sollte die entsprechende Variable je nach Umfang an Ajax übergeben werden.

Problem, von Javascript Perspektive scheint, ist, dass nur die PHP-Variable für jeden Bereich definiert ist.

Ich würde denken, dass es überhaupt nicht versuchen würde, zu analysieren, wenn die andere Bedingung nicht erfüllt ist, aber anscheinend ist das nicht der Fall. Die PHP-Variable $ scope ist immer definiert.

Sowohl Firebug und Chrome-Entwickler-Tool werfen den Fehler:

    var scope_var = <br /> 
<b>Notice</b>: Undefined variable: brand in <b>/Applications/MAMP/htdocs/my_site/my_script.php</b> on line <b>1049</b><br />null; 

Dank

 var scope = <?php echo json_encode($scope) ;?>; 
     if (scope == 'all') {var scope_var = 'all';} 
     else if (scope == 'brands') {var scope_var = <?php echo json_encode($brand) ;?>;} 
     else if (scope == 'cities') {var scope_var = <?php echo json_encode($city) ;?>;} 
     else if (scope == 'models') {var scope_var = <?php echo json_encode($model) ;?>;} 
     else if (scope == 'prange') {var scope_var = <?php echo json_encode($used_prange_low) . '|' . json_encode($used_prange_high) ;?>;} 
+0

einfache Anführungszeichen verwenden var scope_var = ''; –

+0

Sind Sie sicher, dass $ brand definiert ist? versuche es vor den if-Anweisungen zu drucken. –

Antwort

1

Aus dem Blick des Codes Sie die Werte sind expecing Sie von PHP zu JS sind ausgibt als Zeichenfolgen empfangen werden. Wenn dies der Fall ist, müssen Sie alle PHP-Anweisungen in Anführungszeichen setzen. Versuchen Sie folgendes:

var scope = '<?php echo json_encode($scope); ?>'; 
if (scope == 'all') { 
    var scope_var = 'all'; 
} else if (scope == 'brands') { 
    var scope_var = '<?php echo json_encode($brand); ?>'; 
} else if (scope == 'cities') { 
    var scope_var = '<?php echo json_encode($city); ?>'; 
} else if (scope == 'models') { 
    var scope_var = '<?php echo json_encode($model); ?>'; 
} else if (scope == 'prange') { 
    var scope_var = '<?php echo json_encode($used_prange_low) . ' | ' . json_encode($used_prange_high); ?>'; 
} 

Beachten Sie auch, dass eine switch Erklärung Ihre Bedürfnisse anzupassen kann besser als mehrere else if Bedingungen.

+0

Danke, das Hinzufügen der Anführungszeichen ändert nur den Fehler, oder eher bemerken. Es wird jetzt "nicht abgeschlossenes String-Literal". Das wird es also nicht lösen. Aber ich würde mich für die Switch-Sache interessieren. Das klingt vielversprechender. – BernardA

+0

Schalter wird es auch nicht schneiden. Immer noch der gleiche Fehler. Es scheint nicht möglich zu sein, wenn die Variable nicht definiert ist, um damit zu beginnen, auch wenn die Bedingung nicht erfüllt ist – BernardA

+1

Sie können die JSON_HEX_QUOT-Option von json_encode verwenden. Hier das Beispiel json_encode ($ scope, JSON_HEX_QUOT). Es verwaltet die Anführungszeichen und das "nicht abgeschlossene String-Literal" -Problem wird gelöst. Hoffe es kann helfen. – BugCoder

Verwandte Themen