-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 で変数が未定義であることがわかります。または、空の文字列があり、分割が行われ:、配列を取得する[""]ため、この配列のインデックス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);

サーバー上の何かを監視したいようです。これはWebSocketの使用例のようです。使用しているサーバー フレームワークに応じて、使用できるさまざまな Web ソケット パッケージがあります。

于 2013-07-04T19:41:45.467 に答える