由于某种原因,截至昨天,我根本无法让BC全局变量工作。他们不会返回任何内容,只是抛出错误,主要是下面第5行之后的错误。例如:
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 %
我已经尝试过将代码直接放在几个不同页面的主体中(在脚本标记中),也尝试过仅将代码放在普通的.js文档中。
我尝试过简单的console.log和简单的条件语句,但我无法将变量设置为A.停止导致错误,B.返回任何
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)
我也收到过几次错误,说它无法识别"==="或"="。(总是在if语句中谈论严格相等)
有什么想法吗?最近几天有什么变化吗?我从来没有遇到过BC全局变量的问题,现在我无法得到一个返回任何内容的全局变量。谢谢你抽出时间。
编辑:
根据Alyss的评论,我尝试了这个:
var anotherBcGlobalTestingOfVariab = %%GLOBAL_StoreName%%;
console.log("----store name below------");
console.log(anotherBcGlobalTestingOfVariab);
console.log("----store name above------");
RESULT: Uncaught SyntaxError: Unexpected token ;
删除了分号,更改了BC变量:
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------
有趣的是,当我将变量设置为%%GLOBAL_StoreName%%%而不使用分号时,会发生什么,与上面的示例相同,但BC变量不同:
var bcGlobalTestingOfVariab = %%GLOBAL_StoreName%%;
console.log("----store name below------");
console.log(bcGlobalTestingOfVariab);
console.log("----store name above------");
Uncaught ReferenceError: CENSORED is not defined
CENSORED是商店的名称,所以它以某种方式返回了商店名称,但在出现错误的情况下。我尝试过其他几个BC变量,结果都是一样的。
第二次编辑:
if (%%GLOBAL_CustomerGroupId%% === 9) {
console.log("congrats, it only took you 20 hours");
} else {
console.log("you are not a nine");
}
放在脚本标记底部的default.html中。。。这是我第一次能够使某事发挥作用。是的,它奏效了。我无法想象问题会是什么,尤其是当您使用存储范围内的变量时。
您需要将全局参数用引号括起来:
var a = "%%GLOBAL_Example%%";
console.log("%%GLOBAL_Example%%");
这些全局参数由模板引擎(php)进行评估,并被发送到浏览器(客户端)。例如,如果%%GLOBAL_Example%%
的计算结果为Some Example String
,那么看看当它不包含在引号中时,它在JavaScript解释器中的显示方式:
var a = Some Example String;
console.log(Some Example String);
这里的语法错误现在应该很明显了,您可以查看页面源来直接查看这些全局参数的显示方式。由于没有引号,JS解释器认为您指的是一个变量,因此在解析第一个单词后,它会失败,并出现Unexpected Token
错误,因为它只需要一组选定的字符(如"+"或新行),而不是连续字符串的字符。
这里的例外情况是,如果全局求值为一个数字。在这种情况下,不需要引号,也不建议使用(类型冲突)。注意这一点很重要,因为您在一个条件语句中使用了===
比较运算符,该运算符检查type
(int、string等)ANDvalue
中的等价性。因此,如果您尝试在字符串和数字之间使用===
,则您的条件将失败。
示例:
/* "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'
最后要注意的是,分号在JavaScript中是完全可选的。