Javascript Can';t为变量设置新值

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

我可能遗漏了一些非常明显的东西,但我不会因为这个问题而一事无成

在从json提要获取值之后,我很简单地尝试设置变量的值

我使用jquery获取一个jsonp提要,然后将该值存储在一个变量中,以后可以使用该变量,但它不起作用,并且该值也不会被存储。如果输入console.log,则返回值

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调用是异步的,因此事件的时间线是:

  • 打ajax电话
  • console.log
  • ajax调用成功,变量赋值
  • 在使用变量之前,请等待成功事件。这是您的更新,我在其中添加了一个在成功回调函数中调用的函数:

        function continueWorking(){            
            console.log(stream_domain);
            $("<span>" + stream_domain + "</span>").appendTo(".variable");
        }
    
    函数continueWorking(){
    console.log(流_域);
    $(“+stream_domain+”).appendTo(“.variable”);
    }
    
    ajax调用是异步的,因此事件的时间线是:

  • 打ajax电话
  • console.log
  • 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:当我长时间看某个东西时,总是会发生这种情况。有时只要一双新鲜的眼睛