Python-Sijax-Comet无法持续工作

2024-10-16 20:42:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个Sijax comet调用,它的工作并不一致。当它正常工作时,所有回调和数据刷新都正常,但随后它将突然停止发出请求(例如,sijax.is_sijax_请求将为false)。我无法找出间歇性工作的原因。 有几次我尝试在页面上添加警报,这再次触发了Sijax调用,几次运行后,Sijax停止工作。有一次我尝试安装flask Sijax模块,这使得它可以运行几次。但现在我正在尝试所有这些,但没有任何东西触发Sijax

这是comet.html

<html>
<head>
    <script type="text/javascript"
        src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js"></script>
    <script type="text/javascript" src="/static/js/sijax/sijax.js"></script>
    <script type="text/javascript" src="/static/js/sijax/sijax_comet.js"></script>
    <script type="text/javascript">
        {{ g.sijax.get_js()|safe }}
    </script>
</head>

<body>
    <div id="progressWrapper" style="height: 22px; width: 400px; border: 1px solid #e0e0e0; margin-bottom: 10px;">
        <div id="progress" style="width: 0px; height: 100%; background-color: #72cd52; display: block;">
            &nbsp;
        </div>
        <div class="processing" id ="processing" ></div>
    </div>
    
    
    <br>
    
    <button id="btnStart" onclick="callSijax();">Start</button>
    
    
    <script type="text/javascript">
    //$('#btnStart').bind('click', function () {
    function callSijax() {
        $('#progress').css('width', 0).html('&nbsp;');
        
        //sleep time is 500ms
        //alert("calling sjxComet Request");
        sjxComet.request('do_work', [0.5]);
        
}
    </script>
</body>
</html>

这是comet.py

# -*- coding: utf-8 -*-



import os, sys

path = os.path.join('.', os.path.dirname(__file__), '../')
sys.path.append(path)

from flask import Flask, g, render_template
import flask_sijax

app = Flask(__name__)


app.config["SIJAX_STATIC_PATH"] = os.path.join('.', os.path.dirname(__file__), 'static/js/sijax/')


app.config["SIJAX_JSON_URI"] = '/static/js/sijax/json2.js'

flask_sijax.Sijax(app)

def comet_do_work_handler(obj_response, sleep_time):
    

    for i in range(6):
        width = '%spx' % (i * 80)
        counter = '%s  %% Complete' % (i * 10)
        obj_response.css('#progress', 'width', width)
        obj_response.html('#progress', width)
        obj_response.html('#processing', counter)


        yield obj_response

        if i != 5:
            time.sleep(sleep_time)


@flask_sijax.route(app, "/")
def index():
    if g.sijax.is_sijax_request:
        # The request looks like a valid Sijax request
        # Let's register the handlers and tell Sijax to process it
        print("calling comet")
        g.sijax.register_comet_callback('do_work', comet_do_work_handler)
        return g.sijax.process_request()

    return render_template('comet.html')

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=8050, debug=True)

Tags: pathtextdivappflaskrequesthtmltype