1

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

在从 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);
});

这是jsfiddle.net上的相同代码

4

2 回答 2

2

ajax 调用是异步的,所以事件的时间线是:

  1. 进行ajax调用
  2. 控制台日志
  3. ajax调用成功,变量赋值

在使用变量之前等待成功事件。这是您更新的jsFiddle,我在其中添加了一个在成功回调函数中调用的函数:

    function continueWorking(){            
        console.log(stream_domain);
        $("<span>" + stream_domain + "</span>").appendTo(".variable");
    }
于 2012-10-26T13:45:49.110 回答
2

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

ajax 请求之后的代码在请求发出后立即执行。因此,如果您需要响应数据,那么您应该将附加代码从成功方法中执行,类似于以下内容:

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

演示

于 2012-10-26T13:46:00.373 回答