Javascript变量无法在其他文件中工作

时间:2012-01-07 23:25:10

标签: php javascript

我在 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变量。

2 个答案:

答案 0 :(得分:3)

我只是想在你测试访问该变量之前你实际上没有等到文件实际加载

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

load方法接受一个你可以像这样使用的完整回调

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

但是你可能不会以这种方式解决你的问题我会从你的手机中调用一个函数 加载文件而不是设置变量

答案 1 :(得分:0)

在创建变量之前,您无法访问它们。在第一次提供 num 时提供的代码是在加载和解析output.php文件时。由于jQuery的加载函数没有阻塞 - 也就是说,你的浏览器将继续执行JS,而加载函数正在发挥其魔力 ​​- 你无法知道何时将 num 分配给它。它可能是毫秒,或者如果您的网络服务器因任何原因拒绝返回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 in Action吗?