确定。我完全不知所措。这是代码:
$(document).ready(function(){
var newToken = 1;
$.get("junk.php",
function(newToken) {
alert(newToken); // alerts "junk"
});
alert(newToken); // alerts "1"
});
根据我的评论,newToken的第一个警告是“垃圾”(junk.php的唯一输出)。一旦超出.get,newToken将恢复为“1”。我需要将此变量设置为junk.php的输出。这不可能吗?我尝试了一切,到处搜寻。
感谢。
答案 0 :(得分:1)
$(document).ready(function(){
var newToken = 1;
$.get("junk.php",
function(data) {
alert(newToken);
});
alert(newToken); // alerts "1"
});
答案 1 :(得分:1)
您正在使用用作参数的新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() 强>
请注意,如果您在newToken
回调中更新get
,由于调用的异步性质,事情会变得棘手。基本上,请注意这样一个事实,即您在$.get()
的回调中编写的所有内容只有在请求完成后才会执行(稍后),但$.get()
之后但在文档准备就绪之内的所有内容都将获得立即执行,并且get回调将有权访问doc ready函数返回时的变量状态................基本上,你可以给{{1}一个初始值,然后在get回调中使用它,但是其他任何东西都可能导致你没有的结果。
一些例子:
newToken
$(document).ready(function(){
var newToken = 1;
$.get("junk.php",
function() {
newToken++;
alert(newToken); // alerts 2, so far so good.
});
});
答案 2 :(得分:0)
首先,您对newToken
的定义是在传递给$(document).ready()
的匿名函数的上下文中,因此它根本不是全局的。我不认为这是真正的问题,但是......
更严重的是:对$.get
的调用是异步的,因此控制会立即传递到您的alert(newToken)
语句,而无需等待http请求完成,或者其回调运行。因此,任何依赖于该调用中检索的数据的代码都应该在其回调中运行。
答案 3 :(得分:0)
我找到了答案 - jQuery网站上的所有地方(惊喜,惊喜),埋在评论中。
newToken = $.ajax({ type: "GET", url: "junk.php", async: false }).responseText;
这解决了问题 - 因为它是异步的,需要设置为false。这不能使用jQuery.get()来完成,但必须是jquery.ajax,其中可以设置async:false。
使用此格式的请求,可以在整个脚本中使用newToken。希望这最终会帮助别人。