2016-07-21 19 views
1

私はhtmlページの表をajaxで更新する関数を持っています。このajax呼び出しには非常に時間がかかります。私は、関数がsetTimeoutの遅延の前に終了するので、ajax呼び出しがメモリリークなしで終了したら、次のコードが再びそれを実行すると信じていました。しかし、私がchromeの開発ツールを使ってプロセスを見ると、makeTable()関数の多くのインスタンスを見ることができ、エラーFailed to load resource: the server responded with a status of 500 (Internal Server Error)がコンソールに表示されます。これを行うより良い方法はありますか? AJAX呼び出しが完了した後だけjavascript終了後に関数を再実行する方法

function makeTable() { 
    $.ajax({ 
     url: "TableView.asp", 
     type: "GET" 
    }).done(function (ret) { 
     $("#info_display").html(ret); 
     makeYellowTable(); //<--- here this function is called only after the ajax completes. 
    }); 

} 

makeYellowTable() AJAXコールバックの内側にmakeYellowTable()関数呼び出しを移動

function makeTable() { 
    $.ajax({ 
     url: "TableView.asp", 
     type: "GET" 
    }).done(function (ret) { 
     $("#info_display").html(ret); 
    }); 
    setTimeout(makeTable, 5000); 
} 
+2

'Internal Server Error'はJavascriptとは関係ありませんAJAXを介して悪い値)。 –

+1

'done()'の中で呼び出しを行うのはなぜですか? –

答えて

1

setTimeout(makeYellowTable, 5000); 

は、コールバック関数内でなければならない防止エラーを

.done(function (ret) { 
    $("#info_display").html(ret); 
    setTimeout(makeYellowTable, 5000); 
}); 
1

にのみ呼び出されます。それは一度呼び出されます。

+0

は、最初の関数が決して技術的に終了しないので、メモリリークを引き起こしませんか? – Naiya55

+1

OPが 'setTimeout()'の中で呼び出そうとしている 'makeYellowTable()'が同じ関数 'makeTable()'ではないことに気付きました。 :) :) – bipen

1

使用success "完了" し、それが終了していますとき、そこにmakeYellowTableを呼び出します。

function makeTable() { 
    $.ajax({ 
     url: "TableView.asp", 
     type: "GET", 
     success: function() { 
      $("#info_display").html(ret); 
      makeYellowTable(); 

      // or with a timeout again 
      // setTimeout(makeYellowTable, 5000); 
     } 
    }); 
} 
1

ここではいくつか問題があります。まず、$ .ajax()呼び出しの最後に連鎖する.done()メソッドの目的は、応答がサーバから返ってくるときに何らかのコードを呼び出すことです。 setTimeoutを使用するのではなく、そこで実行する必要があるロジックが何であれ必要です。次に、あなたのPHPスクリプトが正しく動作していません。そのコードを見ることなく、何が起こっているのかはわかりませんが、サーバが500を返す原因となっているエラーがあるように見えます。

+0

PHPスクリプトはありません。 – Naiya55

+0

申し訳ありませんが、あなたの.asp、PHPではありません。 $ .ajaxで呼び出すサービスが500エラーを返しています。 – instantaphex

+0

最初に正しく動作する理由を知っていますか?この行動は、私がそれをもう一度呼び出す方法が間違っていると私に信じさせる原因となった。 – Naiya55

関連する問題