Javascript Can';t为变量设置新值
我可能遗漏了一些非常明显的东西,但我不会因为这个问题而一事无成 在从json提要获取值之后,我很简单地尝试设置变量的值 我使用jquery获取一个jsonp提要,然后将该值存储在一个变量中,以后可以使用该变量,但它不起作用,并且该值也不会被存储。如果输入console.log,则返回值Javascript Can';t为变量设置新值,javascript,jquery,ajax,json,variables,Javascript,Jquery,Ajax,Json,Variables,我可能遗漏了一些非常明显的东西,但我不会因为这个问题而一事无成 在从json提要获取值之后,我很简单地尝试设置变量的值 我使用jquery获取一个jsonp提要,然后将该值存储在一个变量中,以后可以使用该变量,但它不起作用,并且该值也不会被存储。如果输入console.log,则返回值 jQuery(document).ready(function($){ serverip = "<?php echo $_SERVER['SERVER_ADDR']; ?>"; str
jQuery(document).ready(function($){
serverip = "<?php echo $_SERVER['SERVER_ADDR']; ?>";
stream_domain = "";
$.ajax({url: 'http://load.cache.is/inspired.php?ip=' + serverip, dataType:'jsonp',
success: function(data){
$.each(data, function(key, val) {
if (key == serverip){
stream_domain = val;
console.log("val: " + val);
}
});
}
});
console.log(stream_domain);
});
jQuery(文档).ready(函数($){
serverip=“”;
stream_domain=“”;
$.ajax({url:'http://load.cache.is/inspired.php?ip=“+serverip,数据类型:'jsonp',
成功:功能(数据){
$。每个(数据、函数(键、值){
if(key==serverip){
stream_domain=val;
控制台日志(“val:+val”);
}
});
}
});
console.log(流_域);
});
下面是相同的代码,ajax调用是异步的,因此事件的时间线是:
function continueWorking(){
console.log(stream_domain);
$("<span>" + stream_domain + "</span>").appendTo(".variable");
}
函数continueWorking(){
console.log(流_域);
$(“+stream_domain+”).appendTo(“.variable”);
}
ajax调用是异步的,因此事件的时间线是:
function continueWorking(){
console.log(stream_domain);
$("<span>" + stream_domain + "</span>").appendTo(".variable");
}
函数continueWorking(){
console.log(流_域);
$(“+stream_domain+”).appendTo(“.variable”);
}
您正在发出异步请求。因此,添加HTML的代码在分配变量的成功之前执行
ajax请求后面的代码在请求发出后立即执行。
因此,如果您需要响应数据,则应将要执行的追加代码从success方法中移出,类似于:
if (key == serverip){
stream_domain = val;
console.log("val: " + val);
$("<span>" + val + "</span>").appendTo(".json");
$("<span>" + stream_domain + "</span>").appendTo(".variable");
}
if(key==serverip){
stream_domain=val;
控制台日志(“val:+val”);
$(“+val+”).appendTo(“.json”);
$(“+stream_domain+”).appendTo(“.variable”);
}
您正在发出异步请求。因此,添加HTML的代码在分配变量的成功之前执行 ajax请求后面的代码在请求发出后立即执行。 因此,如果您需要响应数据,则应将要执行的追加代码从success方法中移出,类似于:
if (key == serverip){
stream_domain = val;
console.log("val: " + val);
$("<span>" + val + "</span>").appendTo(".json");
$("<span>" + stream_domain + "</span>").appendTo(".variable");
}
if(key==serverip){
stream_domain=val;
控制台日志(“val:+val”);
$(“+val+”).appendTo(“.json”);
$(“+stream_domain+”).appendTo(“.variable”);
}
当您说您稍后使用该值时,您的意思是在同一代码块中还是在另一个事件中?如果它在同一个代码块中,那么您需要将该代码放入
.ajax()
调用的success
方法中。这非常有意义,我应该知道:)通常您可以通过向$.ajax
参数添加async:false
来强制它工作。但是,jsonp
不支持这一点。谢谢你提供的信息,我不知道。事实上,我从来没有真正理解过异步,但现在我开始理解它。当你说你以后使用这个值时,你是指在同一块代码中还是在另一个事件中?如果它在同一个代码块中,那么您需要将该代码放入.ajax()
调用的success
方法中。这非常有意义,我应该知道:)通常您可以通过向$.ajax
参数添加async:false
来强制它工作。但是,jsonp
不支持这一点。谢谢你提供的信息,我不知道。实际上,我从未真正理解过异步,但现在我开始了解它。OP还可以通过调用$.ajax
回调函数中的函数,并将他想要运行的任何东西放在单独的函数中,来保持代码整洁@开拓者:绝对同意你。我只回答了为什么代码会这样做,并提出了解决方案。关于关注点分离的编码标准和最佳实践等。。。是的,现在我们有了红绿灯,OP的下一步就是应用好的编码标准:)当你说它有完美的意义时,我一直都是这样做的,我不知道为什么我在写代码时没有得出这个结论。可能是因为它一开始不需要ajax调用,我后来写了这篇文章,并试图以这种方式增加价值。@einar:当我长时间看某个东西时,总是会发生这种情况。有时只要一双新鲜的眼睛。我回答了你的问题,因为我认为这是一个有用的问题,我相信其他人在类似的情况下也会发现这个问题很有用。OP也可以通过调用$.ajax
回调函数中的函数来保持代码整洁,并将他想要运行的任何东西放在单独的函数中@开拓者:绝对同意你。我只回答了为什么代码会这样做,并提出了解决方案。关于关注点分离的编码标准和最佳实践等。。。是的,现在我们有了红绿灯,OP的下一步就是应用好的编码标准:)当你说它有完美的意义时,我一直都是这样做的,我不知道为什么我在写代码时没有得出这个结论。可能是因为它一开始不需要ajax调用,我后来写了这篇文章,并试图以这种方式增加价值。@einar:当我长时间看某个东西时,总是会发生这种情况。有时只要一双新鲜的眼睛