Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 芹菜+;Django+;jQuery——在jQuery中报告芹菜任务的成功/失败_Javascript_Jquery_Python_Django_Celery - Fatal编程技术网

Javascript 芹菜+;Django+;jQuery——在jQuery中报告芹菜任务的成功/失败

Javascript 芹菜+;Django+;jQuery——在jQuery中报告芹菜任务的成功/失败,javascript,jquery,python,django,celery,Javascript,Jquery,Python,Django,Celery,我问了一个类似的问题,关于如何检测和报告芹菜任务何时完成(或失败)。这个问题集中在如何使用Django消息框架来实现这一点,这对于我来说是不必要的。我目前的方法是只发送一个JSON HttpResponse,并根据接收到的JSON呈现成功或失败消息。下面是我用来轮询任务状态的代码: views.py: def poll_state(request): if request.is_ajax(): if 'task_id' in request.POST.keys() and

我问了一个类似的问题,关于如何检测和报告芹菜任务何时完成(或失败)。这个问题集中在如何使用Django消息框架来实现这一点,这对于我来说是不必要的。我目前的方法是只发送一个JSON HttpResponse,并根据接收到的JSON呈现成功或失败消息。下面是我用来轮询任务状态的代码:

views.py:

def poll_state(request):
    if request.is_ajax():
        if 'task_id' in request.POST.keys() and request.POST['task_id']:
            task_id = request.POST['task_id']
            task = AsyncResult(task_id)
            if task.successful():
                logger.debug("Successful upload")
                return HttpResponse(json.dumps({"message":"Upload successful!", "state":"SUCCESS"}), content_type='application/json')
            elif task.failed():
                logger.debug("Error in upload")
                return HttpResponse(json.dumps({"message":"Error in upload!", "state":"FAILURE"}), content_type='application/json')
        else:
            logger.info('No task_id in the request')
    else:
        logger.info('Not an ajax request')

    result = task.result
    state = task.state
    response = {}
    response["percent"] = result["percent"]
    response["state"] = state
    json_data = json.dumps(response)
    return HttpResponse(json_data, content_type='application/json')
以及相应的jQuery(和Django模板):

下面是任务本身的代码:

tasks.py:

@task(base=DBTask) # a custom base task class
def upload_task(datapoints, user, description): # datapoints is a list of dictionaries, user and description are strings
    from utils.db.databaseinserter import insertIntoDatabase
    for dp_count in insertIntoDatabase(datapoints, user, description): # insertIntoDatabase yields the number of datapoints inserted into the database so far at the end of each iteration
        percent_completion = int(100 * (float(dp_count) / float(len(datapoints))))
        current_task.update_state(state='PROGRESS', meta={'percent':percent_completion})
如果上传成功,那么一旦上传完成,控制台日志就会被JSON成功消息弄得乱七八糟。如果上传有错误,那么重新加载会在日志中显示错误消息。在这两种情况下,
poll_state
持续发送HttpResponse of success或failure。此外,在启动新任务后,我仍将发送旧任务信息,而不是当前任务信息。唯一接收到当前任务信息的时间是服务器首次启动时的第一个任务;后续任务的任何轮询将只获取第一个任务的信息

我做错了什么?我对这件事挠头已经有一段时间了,但还是想不出来。这里的最终目标是在web页面上显示某种任务完成或任务失败的通知,并且在完成后不会重复发送成功/失败HttpResponse


我已尝试删除
task.successful()
task.failed()中的task\u id会话键
poll\u状态中的
块。这确实防止了重复发送成功/失败的HttpResponse,但我仍然存在后续任务没有发送其HttpResponse的问题;发生的情况是,一旦在第一个任务之后启动了一个新任务,就会发送第一个任务的HttpResponse,并且当前任务的百分比跟踪不再工作

经过艰苦的努力和奋斗,事实证明,我所有问题的答案都是一句话

这个特殊问题的解决办法是改变

task_id = request.POST['task_id']


轮询状态下

您可以添加服务器端的异常吗?这可能有助于我们找出它失败的地方。事实上,我已经对这个问题做了很多修改,以反映现在发生的事情。我之前遇到的一个例外是在
poll_state
中在Django端误用了
json.dumps
,这无疑是愚蠢的。不幸的是,这个错误并不像我希望的那样是问题的核心,我目前的民意调查仍然存在问题。嘿,丹,你有没有调查过这个问题:?我查看了这个链接,思考了一段时间后,我仍然不确定如何利用它来解决这个问题。你有什么特别的想法吗?谢谢
task_id = request.POST['task_id']
task_id = request.session['task_id']