0

関数 self を呼び出して遅延を設定するメソッド setTimeOut に問題があります。関数は、すべての要求が完了するたびに何度も呼び出される必要がありますが、一度しか実行されません。backbone.js tho を使用しなくても動作しますが、backbone.js との統合後に動作しないことを知りません。どんな助けでも大歓迎です!

したがって、これはGETリクエストを実行するクライアントの機能であり、サーバーからデータを取得し、データが着信するとすぐに(サーバーで決定された)時間間隔でリクエストが実行され、クライアントはそれを取得し、リクエストが再度実行されます。

    getRequest:function() {
        var XHR = $.ajax({
            url: '/nextdocument',
            type: 'GET',
            async: true,
            cache: false,
            timeout: 11000, 
            success:function(data) {
                var name = data.description;
                var price = data.price;
                console.log("read--> " + name + price);
                setTimeout("this.getRequest", 1000);
                if (data.ok == "true") {
                    data["ok"] = data.ok;
                    $.ajax(
                        {
                            url: "/customerdone",
                            data: JSON.stringify(data),
                            processData: false,
                            type: 'POST',
                            contentType: 'application/json'
                        }
                    )
                }else{
                    //no document if no read in
                    console.log("error--> " + data.errorMessage)
                }
            }
        })
        return XHR;
    }
4

2 に答える 2

1

setTimeout問題は、呼び出しで「this」を使用していることです。タイマーが参照しようとしている関数を実行すると、「this」がグローバルオブジェクトになるため、これを行うことはできません。

他の人が示唆しているように、文字列ではなく、実際の関数をタイマーに渡す必要があります。次に、任意のオブジェクトから任意の関数を参照できます。

于 2012-05-04T17:16:13.283 に答える
0

おそらく、関数 getRequest が呼び出されていません。これは、文字列「this.getRequest」を setTimeout 関数に送信しているためだと思います。経験則として、これに文字列を渡さないでください。関数を渡します。状況によってはまったく問題ない場合もありますが (とにかくお勧めしません)、ここでは「これ」が問題を引き起こしている可能性があります。次のようなものを使用します。

getRequest:function() {
    var fn = arguments.callee;
    var XHR = $.ajax({
        url: '/nextdocument',
        type: 'GET',
        async: true,
        cache: false,
        timeout: 11000, 
        success:function(data) {
            var name = data.description;
            var price = data.price;
            console.log("read--> " + name + price);
            setTimeout(fn, 1000);
            if (data.ok == "true") {
                data["ok"] = data.ok;
                $.ajax(
                    {
                        url: "/customerdone",
                        data: JSON.stringify(data),
                        processData: false,
                        type: 'POST',
                        contentType: 'application/json'
                    }
                )
            }else{
                //no document if no read in
                console.log("error--> " + data.errorMessage)
            }
        }
    })
    return XHR;
}
于 2012-05-04T15:50:10.047 に答える