我有一些 Ajax,它从数据库获取信息并将其存储在名为 targetVocab
的数组中。此信息用于在调用 setVocab() 时设置 vocab 的值。第一次可以正常工作,但是当再次点击播放按钮并第二次调用 setVocab 时,它就不起作用了。第二次出现 targetVocab 为空。这是我的简化脚本...
var targetVocab;
var vocab;
var request = new goog.net.XhrIo();
goog.events.listen(request, "complete", function(){
if (request.isSuccess()) {
response = request.getResponseJson();
targetVocab = response['targetVocab'];
setVocab(targetVocab);
}
});
request.send("load_vocab.php");
var setVocab = function(targetVocab) {
vocab = targetVocab;
}
var getVocab = function() {
return vocab;
}
goog.events.listen(playAgainButton, ['mousedown', 'touchstart'], function(e) {
getVocab();
});
更新:
我开始意识到,无论我对 vocab
做什么,都同样适用于 targetVocab
。我最初的想法是,我可以在整个应用程序中拼接 vocab
中的元素,然后通过将其再次设置为 targetVocab
将 vocab
重置为其原始状态。是否有某种方法可以将 vocab 设置为等于 targetVocab,而无需以这种方式保持两者的连接?
最佳答案
您需要以不同的方式定义函数 setVocab。
我刚刚意识到的第二件事:你应该编写 2 个函数,一个 set 函数和一个 GET 函数,这样就不会再拼接了。
例如
function setVocab(targetVocab){
vocab = targetVocab;
}
这样可以确保您确实将 targetVocab 作为变量传递给它。 现在相应的 GET 函数:
function getVocab(){
return vocab;
}
或者将其放在一个(不推荐)
function setVocab(targetVocab){
if(targetVocab!=""){
vocab = targetVocab;
}else{
return vocab;
}
}
现在取决于您实现的调用
goog.events.listen(playAgainButton, ['mousedown', 'touchstart'], function(e) {
getVocab();
});
或者如果您实现了“不推荐”代码,则使用此代码
goog.events.listen(playAgainButton, ['mousedown', 'touchstart'], function(e) {
setVocab("");
});
和
goog.events.listen(request, "complete", function(){
if (request.isSuccess()) {
response = request.getResponseJson();
targetVocab = response['targetVocab'];
setVocab(targetVocab); //chaged here
}
});
关于javascript - 第二次引用时变量会丢失值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17561059/