Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.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
上载/处理数据文件时Django/AJAX状态消息出现问题_Ajax_Django_Ssl_Django Forms_Django Templates - Fatal编程技术网

上载/处理数据文件时Django/AJAX状态消息出现问题

上载/处理数据文件时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,而不是我的开

我有一个Django应用程序,在Admin中有一个页面,我可以上传产品数据的zip文件,然后进行处理。我用Python设置了列表
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 %}