好。 我完全莫名其妙。 下面的代码:
$(document).ready(function(){
var newToken = 1;
$.get("junk.php",
function(newToken) {
alert(newToken); // alerts "junk"
});
alert(newToken); // alerts "1"
});
按我的意见,newToken的第一个警告是“垃圾”(junk.php的唯一输出)。 一旦不用彷徨外,newToken将恢复为“1”。 我需要得到这个变量设置为从junk.php输出。 这是不可能的? 我用尽了一切,并到处搜寻。
谢谢。
你遮蔽第一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"
});
在$。获得信息()
请注意,如果您更新newToken
在get
回调事情可能会变得非常棘手,由于通话的异步特性。 基本上,知道一切都在你的回调写的事实$.get()
只有当请求完成(一段时间后),但之后一切都将得到执行$.get()
但商务部准备将得到内执行向右走,和GET回调将有机会获得变量的状态,因为他们是当文档准备函数返回................基本上,你可以给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
});
例如的jsfiddle
$(document).ready(function(){
var newToken = 1;
$.get("junk.php",
function(data) {
alert(newToken);
});
alert(newToken); // alerts "1"
});
首先,你的定义newToken
被传递给匿名函数的上下文中$(document).ready()
,所以它不是全球性的。 我不认为这是真正的问题,但...
更为严重的是这样的:调用$.get
是异步的,所以控制立即传递给您的alert(newToken)
语句,而不必等待HTTP请求完成,或者其回调运行。 因此,任何代码依赖于在调用中检索数据应在其回调中运行。
我找到了答案 - (惊讶,意外)jQuery的网站上所有的地方,埋在解说的。
newToken = $.ajax({ type: "GET", url: "junk.php", async: false }).responseText;
这解决了这个问题 - 是它是异步的,而且需要设置为false。 这不能使用jQuery.get()来实现,但必须jquery.ajax,其中异步:假可以设置。
随着这种格式的要求,newToken可以在整个脚本中使用。 希望这最终帮助别人。