微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在请求仍处于活动状态/正在进行中时,如何获得 ajax 请求的响应?

如何解决在请求仍处于活动状态/正在进行中时,如何获得 ajax 请求的响应?

我目前有一个问题,我希望能够基于在我的 python 后端运行的函数,在我的前端以 JavaScript/HTML 显示某种进度(条)。为了实现这一点,我在后端定义了一个“计数器”变量来跟踪我的进度。我现在唯一的问题是获取这个计数器变量作为对前端发布请求的响应。这意味着,虽然由后端的 post 请求触发的方法仍在运行,但我希望我的 post 请求能够获得一个包含我的计数器变量的响应主体,该变量应该持续更新。

目前我的请求是这样的:

function runMethod(){
  $.ajax({
  url: "url:port/runMethod",type: 'POST',async: true,data: 
      JSON.stringify({
          'somedata': someData     
  }),success: function (my_data) {
    logger(my_data)
  },error: function() {
    alert("error running method");
     }
  })
}

function logger(my_data){
  var logged = my_data['counter'];
  document.getElementById('myprogress').innerHTML = logged;
  console.log(logged);
}

以及我在 python API 中处理 post 请求的方式,如下所示:

class MyServer(BaseHTTPRequestHandler):
    def __init__(self,request: bytes,client_address,server) -> None:
        self.classes = {t.__name__: t for t in all_classes}
        #self.ldp_experiment = None
        super().__init__(request,server)

    def do_POST(self):
        # Send our response code,header,and data
        self.send_response(200)
        self.send_header("Content-type","Application/json")
        self.send_header("Access-Control-Allow-Origin","*")
        self.send_header('Access-Control-Allow-Headers','Content-Type,Accept')
        
        body = self.rfile.read(int(self.headers['Content-Length']))
        print(body)
        try:
            body = json.loads(body)
        except ValueError:
            pass

        if self.path.startswith('/runMethod'):
        contentType = 'application/json'
        logging.info('Running Method...')
        func1 = somefunc(body['somedata'])
        my_progress = someclass.progress_variable
        response = json.dumps({'counter':[my_progress]})

        self.end_headers()
        self.wfile.write(response.encode('UTF-8'))

    if __name__ == "__main__":        
        webServer = HTTPServer(("",serverPort),MyServer)
        print("Server started http://%s:%s" % ("",serverPort))

        try:
             webServer.serve_forever()
        except KeyboardInterrupt:
             pass

        webServer.server_close()
        print("Server stopped.")

我看到一些帖子建议使用 setInterval() 或 setTimeout() 多次运行请求,这可以让我更频繁地获取计数器变量作为响应,但比该函数运行的次数也多通常,哪种方式会破坏整个目的。

有人知道我可以做些什么来在我的前端获取这个进度变量吗?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。