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
Python Django request.GET.GET()每两次返回一次None_Python_Django_Ajax_Request - Fatal编程技术网

Python Django request.GET.GET()每两次返回一次None

Python Django request.GET.GET()每两次返回一次None,python,django,ajax,request,Python,Django,Ajax,Request,我试图使用一些ajax请求在django视图和模板之间进行更改,但我在请求中遇到了一个奇怪的行为。GET。 Django发送一个错误,指出json.loads(data)的参数中的数据不应该是非类型的,因为request.GET.GET('selects')的结果似乎是无;但如果我尝试调试这段代码,似乎request.GET.GET('selects')每两次都返回一次None。 在控制台中请求request.GET.GET('selects')时,我得到: 第一次没有 和第二次“[{“pk”:

我试图使用一些ajax请求在django视图和模板之间进行更改,但我在请求中遇到了一个奇怪的行为。GET。
Django发送一个错误,指出
json.loads(data)
的参数中的数据不应该是非类型的,因为
request.GET.GET('selects')
的结果似乎是无;但如果我尝试调试这段代码,似乎
request.GET.GET('selects')
每两次都返回一次None。

在控制台中请求
request.GET.GET('selects')
时,我得到:
第一次没有
和第二次“[{“pk”:“57226796-0960-428a-88aa-ba4120ad34b4”}]”,
然后再也没有了
然后在第三次尝试时“[{“pk”:“57226796-0960-428a-88aa-ba4120ad34b4”}]” 每一次尝试都没有结果。。。。 我错了什么

视图.py

class AjaxRenameView(View):

    def get(self,request):
        #import pdb; pdb.set_trace()
        selects=request.GET.get('selects', None)
        selects=json.loads(selects)
        pks = [ pk['pk'] for pk in selects]
        if len(pks)==1:
            folder=Folder.objects.filter(pk=pks[0])
            spotler=Spotler.objects.filter(pk=pks[0])
            if folder:
                form=FolderRenameForm(instance=folder)
                title=_('rename folder')
            elif spotler :
                form=SpotlerRenameForm(instance=folder)
                title=_('rename project')

            context={'form':form,'title':title,'submit':_('rename'),'has_error':False}
            html_form = render_to_string('includes/modal_form.html',
                context,
                request=request,
            )
            return JsonResponse({'html_form': html_form})

        return JsonResponse({'has_error':True, 'message':_('an error has occured while renaming')}, safe=False)

    def post(self,request):
        pass
folder.js

  //...
  function ajaxAction(selects,url,next){
    // when clicked on item of menu (rename, share, move...)
    $.ajax({
      type:"GET",
      data:{'selects':JSON.stringify(selects),'next':next},
      url: url,
      dataType:"json",
      beforeSend: function () {
        $("#Modal .modal-content").empty();
      },
      success: function (data) {
        $("#Modal .modal-content").html(data.html_form);
      }
    });//ajax
  }//function ajaxAction
//...
控制台

(Pdb) request.GET.dict()
{'selects': '[{"pk":"57226796-0960-428a-88aa-ba4120ad34b4"}]', 'next': '/fr/wf/myfiles/'}
(Pdb) request.GET.get('selects')
(Pdb) request.GET.get('selects')
'[{"pk":"57226796-0960-428a-88aa-ba4120ad34b4"}]'
(Pdb) request.GET.get('selects')
(Pdb) request.GET.get('selects')
'[{"pk":"57226796-0960-428a-88aa-ba4120ad34b4"}]'
我终于找到了。 触发ajax调用的click()事件与元素的href属性相关。由于我没有停止函数的执行,链接被激活,并发送了一个对django视图的调用(不带参数)。。。 带有
的ajax调用返回false
e.preventDefault()

我稍微修改了ajax调用:

function ajaxActionMenu(pk_list,url){
  $.ajax({
    type:'GET',
    data:{'pk_list':JSON.stringify(pk_list)},
    url: url,
    dataType:'json',
    success:function(data){
      jQuery.each(data, function(index,value){
        $("#Modal .modal-body .nav").append('<a class="nav-link" href="'+value["url"]+'">'+value["menuitem"]+'</a>');
      });
    },
    complete: function(){
      $("#Modal .modal-body .nav").on("click",".nav-link",function(e){
        e.preventDefault(); // prevent the activation of the href link
        var urlLink=$(this).attr("href");
        ajaxAction(pk_list,urlLink);
        $("#Modal").modal("show");
      });

    }
  });
}
功能ajaxActionMenu(主键列表,url){
$.ajax({
类型:'GET',
数据:{'pk_list':JSON.stringify(pk_list)},
url:url,
数据类型:'json',
成功:功能(数据){
每个(数据、函数(索引、值){
$(“#Modal.Modal body.nav”).append(“”);
});
},
完成:函数(){
$(“#Modal.Modal body.nav”)。在(“单击”,“.nav链接”,函数(e){
e、 preventDefault();//防止激活href链接
var urlink=$(this.attr(“href”);
ajaxAction(pk_列表,URL链接);
美元(“#model”)。model(“show”);
});
}
});
}

我想问题是,
选择
并不是随每个AJAX请求一起发送的。您在浏览器的开发控制台中检查了吗?我在同一个ajax请求中得到了这些结果。数据通过ajax正确发送。我只是在python控制台中反复键入相同的命令,同时执行被set_trace()暂停。控制台每两次仅返回一次对象…服务器端可能有两个线程,其中一个响应正确,另一个响应不正确。这可能是由于会话、cookie或缓存错误。ajax调用由“父级”ajax调用中定义的单击触发。有人可能会说这与。。。但是怎么做呢?ajax函数没有调用相同的url。