Django和简单的Ajax w / jquery

时间:2014-06-08 23:34:01

标签: javascript jquery ajax django

我的django遇到了很大的问题。我只想在文档准备就绪时调用一个视图,并将值传递回js及其alert函数: 我已经阅读了很多这里的堆栈解决方案,一些文章,jquery文档,实现了很多样本​​ - 没有用。

<script type="text/javascript">
    $(document).ready(function() {
        $.get("/resultlive/", function(response) {
            //$( ".loading-progress-6" ).css( 'width: ' response );
            alert(response);
        }); 
    });
</script>

,结果视图是:

def resultlive(request):
  task = Task.objects.get(id=1)
  data= task.done
  json_data = json.dumps(data)
  return HttpResponse(json_data, mimetype='application/json')

工作进度很简单(仅限):

{{percentageDone}}

on localhost / resultlive我得到了正确的结果 但整个模板页面控制台说:错误500内部服务器错误与jquery.extend

我需要做什么?我需要自动刷新任务完成值并更改进度条的宽度而不刷新网页

我花了5个小时没有任何工作,请为jquery非常新手提供一些建议

修改

好的,我已经专门做了一个新的Sample项目来测试响应,我有func的视图:

def ajax(request):
   pcs = Workstation.objects.get(id=1)
   response_data = {}
   try:
       response_data['result'] = 'Success'
       response_data['message'] = list(pcs)
   except:
       response_data['result'] = 'Fail'
       response_data['message'] = 'fail'
   return HttpResponse(json.dumps(response_data), content_type="application/json")

和href点击后调用JavaScript:

        <script type = 'text/javascript'>
            function FireScript(){
                $.ajax({type:'GET', url: '/ajax/', datatype: 'json', async: true, data: {},
                        success: function(json) {alert(json.message);}
                });
            }

        </script>

它确实运作良好,但当我改变视野时:
    response_data ['message'] = list(pcs)        变成:     response_data ['message'] = pcs.processes_done

控制台抛出错误500,为什么? 在Python上它运作得很好。

EDIT2:

这一个人只检索一行(正如预期的那样),并使用AJAX返回两个vars进行查看,gosh ......最后

def ajax(request):
   pcs = Workstation.objects.get(id=1)
   response_data = {}
   try:
      response_data['result'] = 'Success'
      response_data['message'] = str(pcs.processes_made)
      #serializers.serialize("json", pcs) for more objects
   except:
     response_data['result'] = 'Fail'
     response_data['message'] = 'fail'

return HttpResponse(json.dumps(response_data), content_type="application/json")

1 个答案:

答案 0 :(得分:0)

在AJAX视图中试试这个:

from django.views.decorators.csrf import csrf_exempt

@csrf_exempt
def ajax(request):
   pcs = Workstation.objects.get(id=1)
   response_data = {}
   try:
       response_data['result'] = 'Success'
       response_data['message'] = list(pcs)
   except:
       response_data['result'] = 'Fail'
       response_data['message'] = 'fail'
   return HttpResponse(json.dumps(response_data), content_type="application/json")

我添加的唯一更改是@csrf_exempt并导入csrf_exempt from django.views.decorators.csrf import csrf_exempt

您可以查看Django Cross Site Protection。 Django是关于跨站点保护和csrf令牌的文档。