Django+JQuery+Ajax+Post方案中的问题及解决

遇到的问题

  • 请求发送后,服务端无响应
    Django对于POST请求会检查请求来源,表单方式提交时:

    • 在Form内添加 `{% csrf_token %}` 标签;
    • request响应函数前,添加 `@csrf_exempt` ;
  • Jquery POST 方式提交时,在服务端添加了 @csrf_exempt ,在Django1.5版本后,无法直接通过POST获取参数,通过`raw_data = request.body` 获取数据时,出现如下错误提示:

Exception: You cannot access body after reading from request‘s data stream

其实这个提示的意思是在获取body数据前,数据流已经被读过;问题就出在 @csrf_exempt 上,Django提前对request做了读取验证操作,因此问题就来了:Django服务端要接收POST请求,需要支持csrf_exempt,但添加这个前置后,又无法获取POST参数了。

  • 解决办法:不使用服务端的@csrf_exempt前置说明,前端添加csrftoken,让服务端可以接收到POST请求。

    $.ajaxSetup({

    dataType: "json",
      beforeSend: function(xhr, settings){
          var csrftoken = $.cookie(‘csrftoken‘);
          xhr.setRequestHeader("X-CSRFToken", csrftoken);
      },

    });

为Ajax添加预处理,保证每次POST请求时,自动发送csrftoken,这样就可以在服务端正常处理POST数据了。



生命在于折腾~~

Django+JQuery+Ajax+Post方案中的问题及解决,布布扣,bubuko.com

时间: 2024-08-09 10:44:12

Django+JQuery+Ajax+Post方案中的问题及解决的相关文章

django + jQuery AJAX初试

经过反复的测试,终于在django+jQuery AJAX成功返回服务器数据,本次测试在/static/test/test.txt test.txt: txt = {'1':'re','2':'qqq','3':'www','4':'rere'} views: def test(request): return render(request,'app/accounts/test.html') urls: urlpatterns = [ url(r'^test/$',views.test), ]

jquery.ajax的url中传递中文乱码问题的解决方法

jquery.ajax的url中传递中文乱码问题的解决方法 JQuery JQuery默认的contentType:application/x-www-form-urlencoded 这才是JQuery正在乱码的原因,在未指定字符集的时候,是使用ISO-8859-1 ISO8859-1,通常叫做Latin-1.Latin-1包括了书写所有西方欧洲语言不可缺少的附加字符. JQuery的Ajax根本没有考虑到国际化的问题,使用了欧洲的字符集,所以才引起了传递中文出现乱码的问题. 而我们的UTF-8

JQuery ajax 在aspx中传值和取值

传值:ajax中的data(json)  js代码: <script type="text/javascript"> $(function () { $("#btnAddNews").bind("click", function () { var _name= $.trim($("#txtNewTitle").val()); $.ajax({ type: "POST", url: "A

django + jQuery AJAX POST数据

废话少说,直接代码伺候: views: from django.http import JsonResponse def test_post(request): name = request.POST['name'] city = request.POST['city'] qq = request.POST['qq'] dict = {'name':name,'city':city,'qq':qq} return JsonResponse(dict) def test(request): ret

统一处理jquery ajax请求过程中的异常错误信息的机制

当jQuery ajax向服务器发送请求,服务器发生异常,比如:400.403.404.500等异常,服务器将异常响应给客户端,此时的ajax可以获取异常信息并进行处理,但此时我们一般是跳转到与异常编码对应的异常页面,对异常集中展现与处理. 首先,发送ajax请求: $.ajax({ type: ‘POST’, url: url, data: data, success: success, dataType: dataType }); 然后,服务发生异常,将对应的异常编码响应给客户端: resp

html文件中jquery与velocity变量中的$冲突的解决方法

1.使用jQuery代替$. 如:jQuery.ajax(); 缺点:不适合扩展,一旦替换成第三方库时,那就麻烦大发 2.使用jQuery.noConflict. 如:var j = jQuery.noConflict(); j.ajax(); 缺点:当使用jQuery的相关插件时,会使得插件失效哦! 3.wrap jQuery中的冲突方法. 如$.ajax()在Velocity中会冲突,则重新定义如下: function dw(){} dw.ajax=function(s){ jQuery.a

jquery ajax 表单提交被浏览器拦截解决办法

通常jquery的submit表单提交是不会被拦截的,但是用jquery ajax异步提交是会被拒绝的,既然是异步提交造成的问题,那就好解决了,因为jquery ajax方法提供了参数选项: async :true, 默认设置下,所有请求均为异步请求.如果需要发送同步请求,请将此选项设置为 false.注意,同步请求将锁住浏览器,用户其它操作必须等待请求完成才可以执行. 原文地址:https://www.cnblogs.com/richardcastle/p/8297325.html

[JQuery] Ajax使用过程中的问题总结

JQuery提供的ajax函数,在使用过程中,因为对参数的不了解,导致了很多错误,现在总结如下,以便时常温固,不犯同样的错误. 1.我在项目中使用到的ajax请求格式如下: 1 $.ajax({ 2 url: 3 data: 4 contentType: 5 dataType: 6 type: 7 complete:function(res, textStatus, jqXHR){ 8 if(textStatus != 'success'){ 9 10 } 11 }, 12 error:func

django jquery ajax 知识点

示例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 <div id='d'>1</div> <div> <div id='i1' name='123'> <h1>fff</h1> 2 <a id='v'>ff</a> <h1>fff</h1> </div> <div> 大丰收的 <div>3</div> <div