2016-05-25 7 views
1

Aus irgendeinem Grund kann ich nicht die globalen BC-Variablen wie gestern arbeiten. Sie geben nichts zurück und spucken stattdessen Fehler, hauptsächlich den nach Zeile 5 unten. zum Beispiel:Ich kann BigCommerce globale Variablen nicht mehr zum Arbeiten

console.log(%%GLOBAL_CustomerGroupId%%); //returns only errors 
console.log(%%GLOBAL_StoreName%%); //returns only errors 
console.log("hello"); //returns "hello" (as it should) 

OUTPUT - Uncaught SyntaxError: Unexpected token % 

Ich habe versucht, den Code direkt in dem Körper von verschiedenen Seiten (in Script-Tags) setzen, und ich habe auch nur darum, den Code in normalen Js docs versucht.

Ich habe einfach console.logs versucht, und einfache Bedingungen, aber ich kann die Variablen A. Stopp verursacht Fehler und B. nicht bekommen Rückkehr etwas

1| if (%%GLOBAL_CustomerGroupId%% === 3) { 
2|  console.log("you are three"); 
3|  } else { 
4|  console.log("you are not 3"); 
5| } 

OUTPUT - Uncaught SyntaxError: Unexpected token % (for line 1) 

Ich habe auch den Fehler erhielt ein paar Male, die besagt, dass es "===" oder "=" nicht erkennt. (immer über die strikte gleich in einer if-Anweisung sprechen)

Irgendwelche Ideen? Hat sich in den letzten Tagen etwas verändert? Ich habe noch nie Probleme mit den globalen Variablen von BC bekommen, und jetzt kann ich keinen einzigen mehr bekommen, der etwas zurückgibt. Vielen Dank für Ihre Zeit.

EDIT:

von Alyss Kommentar Basierend off habe ich versucht, dann das:

var anotherBcGlobalTestingOfVariab = %%GLOBAL_StoreName%%; 

    console.log("----store name below------"); 
    console.log(anotherBcGlobalTestingOfVariab); 
    console.log("----store name above------"); 

RESULT: Uncaught SyntaxError: Unexpected token ; 

das Semikolon entfernt, der BC Variable geändert:

var anotherBcGlobalTestingOfVariab = %%GLOBAL_CustomerName%% 

    console.log("----customer name below------"); 
    console.log(anotherBcGlobalTestingOfVariab); 
    console.log("----customer name above------"); 

RESULT: 
----customer name below------ 
undefined 
----customer name above------ 

Interessante, was passiert, wenn ich gesetzt eine Variable gleich %% GLOBAL_StoreName %% ohne das Semikolon, dasselbe Beispiel wie oben, aber andere BC-Variable:

var bcGlobalTestingOfVariab = %%GLOBAL_StoreName%%; 

    console.log("----store name below------"); 
    console.log(bcGlobalTestingOfVariab); 
    console.log("----store name above------"); 

    Uncaught ReferenceError: CENSORED is not defined 

CENSORED ist der Name des Ladens, es so irgendwie den Shop-Namen zurückgegeben, sondern im Rahmen eines Fehlers. Ich habe mehrere andere BC-Variablen mit dem gleichen Ergebnis versucht.

ZWEITE EDIT:

if (%%GLOBAL_CustomerGroupId%% === 9) { 
    console.log("congrats, it only took you 20 hours"); 
} else { 
    console.log("you are not a nine"); 
} 

in default.html am unteren Rand platziert in Script-Tags ... erste Mal, dass ich in der Lage gewesen, etwas Arbeit zu machen. Ja, es hat funktioniert. Ich kann mir nicht vorstellen, was das Problem besonders wäre, wenn Sie storeweite Variablen verwenden.

+0

haben Sie versucht, eine var gleich der globalen? – Alyss

+0

Ich habe es gerade versucht und hatte kein besseres Glück. Zuerst sagte er mir, dass das Semikolon am Ende der Variablenzuweisung ein Syntaxfehler war. Ich habe es entfernt. Dann sagte es mir, dass "<" ein Syntaxfehler war (von einem auskommentierten Stück Code, also löschte ich es). Ich setze %% GLOBAL_StoreName %% auf eine Variable. Ich console.log'd die Variable. Das Ergebnis war undefiniert. – Tron

+0

können Sie mir Ihre Store-URL unter [email protected] mailen? – Alyss

Antwort

1

Sie müssen die Globals in Anführungszeichen einzuwickeln: von der Template-Engine

var a = "%%GLOBAL_Example%%"; 
console.log("%%GLOBAL_Example%%"); 

Diese Globals ausgewertet (php) und werden an den Browser (der Client gesendet) wird bereits ausgewertet. Zum Beispiel, wenn %%GLOBAL_Example%%-Some Example String auswertet, dann werfen Sie einen Blick auf, wie es scheint, mit dem JavaScript-Interpreter, wenn sie nicht in Anführungszeichen eingeschlossen:

var a = Some Example String; 
console.log(Some Example String); 

Die Syntaxfehler hier sollte nun klar sein, und Sie können Seite anzeigen Quelle, um aus erster Hand zu sehen, wie diese Globals erscheinen.Da es keine Anführungszeichen gibt, denkt der JS-Interpreter, dass Sie sich auf eine Variable beziehen. Wenn das erste Wort analysiert wird, schlägt der JS-Interpreter mit einem Unexpected Token-Fehler fehl, da nur eine ausgewählte Gruppe von Zeichen erwartet wird (z. B. '+' oder neu) Linie) anstatt die Zeichen Ihrer fortgesetzten Zeichenkette.


Die Ausnahme hier wäre, wenn das Global zu einer Zahl auswertet. In diesem Fall sind keine Anführungszeichen erforderlich und werden nicht empfohlen (Konflikttyp). Dies ist wichtig zu beachten, da Sie den === Vergleichsoperator in einem Ihre bedingten Anweisungen verwenden, die sowohl für die Gleichwertigkeit überprüfen in type(int, String, etc.)UNDvalue. So wird Ihre Bedingung fehlschlagen, wenn Sie versuchen, === zwischen einer Zeichenfolge und einer Zahl zu verwenden.

Beispiel:

/* "9" is a string, whereas 9 (without quotes) is a number */ 
console.log("9" === 9 ? 'Equal' : 'Not Equal!'); //Prints 'Not Equal!' 
console.log(9 === 9 ? 'Equal' : 'Not Equal!'); //Prints 'Equal' 

Als abschließende Bemerkung, sind Semikolons in JavaScript vollständig optional.

+0

Ich habe versucht, das zu tun, was Sie am einfachsten für 2 verschiedene Variablen gesagt haben: eine, die eine Zahl zurückgeben soll, und eine eine Zeichenkette - die nicht-zitierten erzeugen einen Fehler (Unerwartetes Token%) und die zweite gibt die tatsächlichen Zeichen zurück die Anführungszeichen, so dass es "%% GLOBAL_CustomerGroupId %%" zurückgegeben hat, dasselbe für dasjenige, das eine Zeichenfolge zurückgeben soll. Beachten Sie, dass es für mich funktioniert innerhalb