您正在使用用作参数的新 newToken 变量来隐藏第一个 newToken 变量:
问题:
$(document).ready(function(){
var newToken = 1; // <== newToken number 1
$.get("junk.php",
function(newToken) { // <== This is newToken number 2.
// since it's the first argument
// in the get success function it will
// be the data returned.
alert(newToken); // <== Alerts the data returned. newToken number 1 is
// shadowed, obscured, covered up...
});
alert(newToken);
});
解决方法...使用不同的名称,甚至是 arguments 数组:
解决办法:
$(document).ready(function(){
var newToken = 1;
$.get("junk.php",
function() { // <== don't shade newToken
// you could use another variable name like "data"
// but I decided to use the arguments array for kicks
alert("Data is: " + arguments[0] + // <== junk
"\nNew Token is: " + newToken); // <== 1
});
alert(newToken); // alerts "1"
});
Info on $.get()
请注意,如果您在 get 回调中更新 newToken,由于调用的异步性质,事情可能会变得很棘手。基本上,请注意,您在$.get() 的回调中编写的所有内容仅在请求完成时(稍后)才会执行,但$.get() 之后但在文档准备好的所有内容将立即执行,并且 get 回调将可以访问变量的状态,就像 doc ready 函数返回时一样......基本上,您可以给 newToken 一个初始值,然后在 get 回调中使用它,但其他任何事情都可能导致您不例外的结果。
一些例子:
$(document).ready(function(){
var newToken = 1;
$.get("junk.php",
function() {
newToken++;
alert(newToken); // alerts 2, so far so good.
});
});
$(document).ready(function(){
var newToken = 1;
$.get("junk.php",
function() {
newToken++;
alert("get: " + newToken); // alerts 3 - this is the last alert
});
newToken++;
alert("ready:" + newToken); // alerts 2 -
// this happens before the server responds
});