Javascript变量在其他文件中不起作用


Javascript variable not working in a different file

我在index.php文件中有这个脚本:

<script type="text/javascript">
$(document).ready(function(){
    $('#ads').load('output.php').fadeIn('slow');
});
</script>

output.php文件包含一个隐藏的输入,我通过它传递php变量并成功检索它:

<script type="text/javascript">
num = document.getElementById('number').value;
</script>

如果我在output.php文件中放入一个alert(num);,一切都会正常工作。尽管当我在index.php文件中执行同样的操作时,javascript似乎看不到num变量。

我只是想告诉大家,在测试访问变量之前,不要等到文件真正加载

http://api.jquery.com/load/

load方法获取一个完整的回调,u可以像这样使用

$(document).ready(function(){
  $('#ads').load('output.php', function() {
   alert(num);
  }).fadeIn('slow');
});

但你可能不应该用这种方式来解决问题。我建议你从已加载文件,而不是设置变量

在创建变量之前,不能访问它们。在您提供的代码中,第一次分配num是在加载和解析output.php文件时。由于jQuery的加载函数没有阻塞-也就是说,当加载函数发挥其魔力时,你的浏览器将继续执行JS-你没有办法知道num将被分配给什么时候。这可能是几毫秒,如果你的Web服务器出于任何原因拒绝返回output.php的输出,也可能永远不会。

在jQuery编程中,使用回调函数是一种常见的做法,尽管您可以通过向它传递函数引用而不是内联函数来使其更干净:

$(document).ready(function(){
    $('#ads').load('output.php', outputLoadCallback).fadeIn('slow');
});
function outputLoadCallback(response, status) {
    console.log(num);
}

也许更好的方法是在回调函数中包含运行所需的逻辑,如下所示:

var num; // Make sure num is in the global scope
function outputLoadCallback(response, status) {
     num = document.getElementById('number').value;
     console.log(num);
}

如果你"不太专业",我可以建议你使用jQuery吗?