0

特定の REST URI にアクセスしたい。

$.ajax({
    type: "POST",
    url: url + "result/" + ticket_id,
    success: function(data) {
        setTimeout(function(){pollResponse(url,data.id);}, 3000);
    }
});

これは機能します。URI にアクセスすると、views 関数がその役割を果たします。その上successで、新しい URI に移動します。

function pollResponse(url, id)
{
    $.getJSON(url + "status/" + id, {},
        function(data) {
            if (data.report == null)
            {
                console.log(data.status_response);
                setTimeout(function(){pollResponse(url, id);}, 3000);
            }
            else
                console.alert('DONE!');
        }
    );
};

URI がデータの一部として返さreportれない (または空である) 場合は、3 秒後に再度問い合わせます。

しかし、コンソールにログを出力した後、応答は[200] OK. サーバーに問い合わせることはもうありません。

Python のビュー関数で行ったのは、

from cornice import Service
status = Service(name='status',
                    path=root+'/status/{some_id}',
                    description=status_desc)
@status.get()
def get_status(request):
   // do something

   if (...):
      return {'report': ''}
   else:
      return {'report': 'NOT EMPTY')
4

2 に答える 2

1

結果に解析の問題があるか、クロスドメインの問題がある可能性があります。ajax関数を直接使用するようにコードを変更してみてください。

$.ajax({
    url: url + "status/" + id,
    dataType: 'json',
    data: {},
    success: function(data) {
        if (data.report == null)
        {
            console.log(data.status_response);
            setTimeout(function(){pollResponse(url, id);}, 3000);
        }
        else
            console.alert('DONE!');
    },
    error: function(jqXHR, textStatus, errorThrown) {
        console.error(textStatus);
        console.error(errorThrown);
        console.log(jqXHR.responseText);
    }
);

このようにして、応答がエラーの原因であるかどうかを確認できます。解析エラーがある場合は、エラー関数のjqXHR.responseTextを介してデータを取得し、何が問題であるかを確認できます。

多くの場合、jQueryエラーでAJAXのショートカット関数がサイレントに実行されます。これが私がめったに使用しない理由です。

于 2012-08-05T02:21:41.233 に答える
0

setTimeoutポーリング関数のように見えます:

setTimeout(function(){pollResponse(url, data.id);}, 3000);

それ以外の:

setTimeout(function(){pollResponse(url, id);}, 3000);
于 2012-08-05T02:06:51.840 に答える