-1

我使用 jQuery 实时获取 JSON 数据,稍后我将这些数据打印到屏幕上。当我从屏幕获取数据并再次在屏幕上打印时,出现错误“未定义”。代码:

var yenile = setInterval(function() {
    $.getJSON("ayarlar.asp",function(veri) {
        $(".wfloodnum").html("Şu anki değer:" + veri.floodwarno);
        $(".nfloodnum").html("Şu anki değer:" + veri.floodnum);
    });
},100);
var anlikwar = $(".wfloodnum").text().split(":")[1];
var anlikflood = $(".nfloodnum").text().split(":")[1];
alert(anlikflood);

我应该怎么办?编辑:我无法从 $.getJSON 函数中访问这个变量的值。我需要从这个功能中获得这些价值的可访问性。所以,我必须从 $.getJSON 函数中定义变量。这就是为什么我尝试将 .split() 应用于屏幕上的文本。

4

1 回答 1

1

您的代码的问题在于,由于您在那里进行了异步调用,因此执行顺序可能看起来像这样(当然,由于时间间隔和对 getJSON 的多次调用,它可能会有所不同):

// 1. the call to setInterval is initiated (the function in it will not be called until the sequential instructions after setInterval are finished)
var yenile = setInterval(function() {...}, 100);
// 2
var anlikwar = $(".wfloodnum").text().split(":")[1];
// 3
var anlikflood = $(".nfloodnum").text().split(":")[1];
// 4
alert(anlikflood);

// 5. NOW COMES THE function given to setInterval
$.getJSON("ayarlar.asp",function(veri) { ... });
// 6. now would come any other instructions in the function given to setInterval after the getJSON
// 7.
$(".wfloodnum").html("Şu anki değer:" + veri.floodwarno);
// 8
$(".nfloodnum").html("Şu anki değer:" + veri.floodnum);

在上面的序列中,您会看到在第 2 步和第 3 步中的变量是未定义的,因为您访问的元素还没有任何文本。或者,它有空字符串,拆分是 by:并且你得到数组[""],因此1这个数组中的索引是未定义的。

您必须重新考虑代码的结构。至少应该在 JSON 请求完成anlikwar分配变量和。anlikwar

至少你可以做类似的事情:

var anlikwar;
var anlikflood;

var yenile = setInterval(function() {
    $.getJSON("ayarlar.asp",function(veri) {
        $(".wfloodnum").html("Şu anki değer:" + veri.floodwarno);
        $(".nfloodnum").html("Şu anki değer:" + veri.floodnum);

        anlikwar = $(".wfloodnum").text().split(":")[1];
        // or simply: anlikwar = veri.floodwarno
        anlikflood = $(".nfloodnum").text().split(":")[1];
        // or simply: anlikflood = veri.floodnum
    });
},100);

看起来您想监视服务器上的某些内容。这看起来像一个WebSockets用例。根据您使用的服务器框架,您可以使用不同的 Web 套接字包。

于 2013-07-04T19:41:45.467 回答