无法为变量设置新值

时间:2012-10-26 13:43:10

标签: javascript jquery ajax json variables

我可能遗漏了一些非常明显的东西,但我没有遇到这个问题。

我很容易在从json feed获取值后设置变量的值。

我正在使用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);
});

以下是jsfiddle.net

上的相同代码

2 个答案:

答案 0 :(得分:2)

ajax调用是异步的,因此事件的时间轴是:

  1. 进行ajax通话
  2. 的console.log
  3. ajax呼叫成功,变量分配
  4. 在使用变量之前等待成功事件。这是您更新的jsFiddle,其中我添加了一个在成功回调函数中调用的函数:

        function continueWorking(){            
            console.log(stream_domain);
            $("<span>" + stream_domain + "</span>").appendTo(".variable");
        }
    

答案 1 :(得分:2)

您正在发出异步请求。因此,在成功之前执行附加HTML的代码会分配变量。

在发出请求后,ajax请求后面的代码将不可执行地执行。 因此,如果您需要响应数据,那么您应该从类似于此的成功方法移动您的追加代码:

if (key == serverip){
    stream_domain = val;
    console.log("val: " + val);
    $("<span>" + val + "</span>").appendTo(".json");
    $("<span>" + stream_domain + "</span>").appendTo(".variable");
}

DEMO