jQuery中未定义的变量错误

时间:2013-07-04 19:03:26

标签: json jquery

我正在使用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函数中访问这些变量的值。我需要accessibilty来获取这个函数的这些值。所以,我必须从$ .getJSON函数中定义变量。这就是我尝试将.split()应用于屏幕上的文本的原因。

1 个答案:

答案 0 :(得分: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中,变量未定义,因为您访问的元素尚未包含任何文本。或者,它有空字符串,split是:,你得到数组[""],因此这个数组中的索引1是未定义的。

您必须重新考虑代码的结构。在 JSON请求完成后,至少应为变量anlikwaranlikwar分配

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

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套接字包。