我无法再让 BigCommerce 全局变量工作了



由于某种原因,截至昨天,我根本无法让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中是完全可选的。

相关内容

  • 没有找到相关文章

最新更新