Javascript 制作镀铬延长件,可';t在js文件中正确分配全局变量(单个文件)
奇怪的错误,说Javascript 制作镀铬延长件,可';t在js文件中正确分配全局变量(单个文件),javascript,ajax,google-chrome-extension,xmlhttprequest,Javascript,Ajax,Google Chrome Extension,Xmlhttprequest,奇怪的错误,说config是undefined,但这是错误的: 没有拼写错误: 我不是JavaScript程序员,这是我的第一个扩展。我希望这是一个众所周知的问题。唯一使用的是AJAX。代码是这样开始的: var config; var req = new XMLHttpRequest(); req.onreadystatechange = function() { if (this.readyState == 4 && this.status == 200) {
config
是undefined
,但这是错误的:
没有拼写错误:
我不是JavaScript程序员,这是我的第一个扩展。我希望这是一个众所周知的问题。唯一使用的是AJAX。代码是这样开始的:
var config;
var req = new XMLHttpRequest();
req.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
config = JSON.parse(this.response);
}
}
req.open("GET", chrome.extension.getURL('/config.json'), true);
req.send();
// here console.log(config) will return undefined.
换句话说,变量的赋值很奇怪。因为
XMLHTTPRequest
s是异步的(它们不会在代码流动时立即发生),所以您必须要么将代码放在加载事件侦听器中,要么从同一事件侦听器调用一个函数,该函数将包含该代码:
var config;
var req = new XMLHttpRequest();
req.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
config = JSON.parse(this.response);
// any code that uses config should be here
}
}
或:
在后一种情况下,您不妨在另一时间将
config
作为参数传递给doMagicStuff
,请提供完整的。您至少需要提供发生错误的行。您的代码中没有任何地方试图访问currency
属性。因此,这是不完整的。通常,对于Chrome扩展调试问题,您几乎总是需要提供manifest.json。
var config;
var req = new XMLHttpRequest();
req.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
config = JSON.parse(this.response);
// call doMagicStuff here
doMagicStuff();
}
}
function doMagicStuff() {
// code that use config goes here
}