上载/处理数据文件时Django/AJAX状态消息出现问题
我有一个Django应用程序,在Admin中有一个页面,我可以上传产品数据的zip文件,然后进行处理。我用Python设置了列表上载/处理数据文件时Django/AJAX状态消息出现问题,ajax,django,ssl,django-forms,django-templates,Ajax,Django,Ssl,Django Forms,Django Templates,我有一个Django应用程序,在Admin中有一个页面,我可以上传产品数据的zip文件,然后进行处理。我用Python设置了列表status\u message,以便不断更新处理过程的信息 在Firefox上,在我的开发环境中实现这一点时,效果非常好。当我在Chrome上测试它时,报告根本就不显示了。更重要的是,但可能相关的是,当我推到我的暂存服务器并测试它时,一旦上传发生,文件开始被处理,我就会被重定向到404错误页面,我不知道为什么。我所能想到的最大区别是在登台服务器上的SSL,而不是我的开
status\u message
,以便不断更新处理过程的信息
在Firefox上,在我的开发环境中实现这一点时,效果非常好。当我在Chrome上测试它时,报告根本就不显示了。更重要的是,但可能相关的是,当我推到我的暂存服务器并测试它时,一旦上传发生,文件开始被处理,我就会被重定向到404错误页面,我不知道为什么。我所能想到的最大区别是在登台服务器上的SSL,而不是我的开发环境。最后,可能是由于我对AJAX+Django缺乏经验,在加载状态消息之后,会有最后一次页面刷新。这很烦人,但并没有造成真正的伤害(除非它也导致了其他问题之一)。我头晕目眩。发生什么事?一条线是问题,我的观点,还是整个问题
问题1。div#status message中的报告会在Firefox中更新,但不会在Chrome中更新
编辑1:结果表明,这部分来自Chrome 28缓存。看见现在,Chrome在所有处理之后都会显示消息,但直到那时状态消息才会改变:
function retrieve_status()
{
$.ajax({
url: "print_status",
success: function(data){
$('#status-message').html("");
for (var i=0; i<data['message'].length; i++)
$('#status-message').append(data['message'][i] + "<br>");
$('#status-message').scrollTop($('#status-message')[0].scrollHeight);
},
cache: false
});
}
url.py
from django.conf.urls.defaults import patterns, url
# URLs
urlpatterns = patterns('myappload.views',
url(r'^$', 'index', name='product_load_page'),
url(r'^print_status/$', 'print_status', name='product_upload_status'),
)
forms.py
from django import forms
class ProductLoadForm(forms.Form):
file = forms.FileField()
index.html:
{% extends "admin/base_site.html" %}
{% block content %}
<form name="product_load_form" class="form form-horizontal"
enctype="multipart/form-data" method="post">
{% csrf_token %}
{% include 'forms/basic.html' %}
<input id="upload-button" type="submit" value="Upload"/>
</form>
<div id="status-message">
The status message will show up here <br>
</div>
<script>
function retrieve_status()
{
$.get("print_status", function( data ) {
$('#status-message').html("");
for (var i=0; i<data['message'].length; i++)
$('#status-message').append(data['message'][i] + "<br>");
$('#status-message').scrollTop($('#status-message')[0].scrollHeight);
});
}
$(document).ready(function() {
retrieve_status(); //the page will refresh when done, calling this on load
$('#upload-button').click(function() {
setInterval(function(){retrieve_status()},500);
});
$('#status-message').css('height', $(window).height() - 170);
});
</script>
{% endblock %}
{%extends“admin/base\u site.html”%}
{%block content%}
{%csrf_令牌%}
{%include'forms/basic.html%}
状态消息将显示在此处
函数检索_状态()
{
$.get(“打印状态”,函数(数据){
$(“#状态消息”).html(“”);
对于(var i=0;i事情的耦合-表单操作在哪里?是否有理由将JQuery函数放在ready()函数之外?我不确定第一个问题的意思。文件上载由html表单提交处理,方法=POST,因此在view.py中由def index(request)捕获
它有一个if块来处理POST。jquery函数是从内部调用的ready()
,我只是把它放在外面,因为我觉得它看起来更干净。我认为使用这种方法会导致页面刷新,并且以某种方式切换到使用AJAX上传会更好。啊,我很抱歉,你已经绑定了click事件。你的get函数已经在使用AJAX了,尽管你可能知道这一点。我想你是在发明wheel一点-也许可以看看JQuery progressbar,通过AJAX回调url来回答进度
{% extends "admin/base_site.html" %}
{% block content %}
<form name="product_load_form" class="form form-horizontal"
enctype="multipart/form-data" method="post">
{% csrf_token %}
{% include 'forms/basic.html' %}
<input id="upload-button" type="submit" value="Upload"/>
</form>
<div id="status-message">
The status message will show up here <br>
</div>
<script>
function retrieve_status()
{
$.get("print_status", function( data ) {
$('#status-message').html("");
for (var i=0; i<data['message'].length; i++)
$('#status-message').append(data['message'][i] + "<br>");
$('#status-message').scrollTop($('#status-message')[0].scrollHeight);
});
}
$(document).ready(function() {
retrieve_status(); //the page will refresh when done, calling this on load
$('#upload-button').click(function() {
setInterval(function(){retrieve_status()},500);
});
$('#status-message').css('height', $(window).height() - 170);
});
</script>
{% endblock %}