“未捕获的 RangeError:在 Dt (jquery.min.js:2) 处超出了最大调用堆栈大小”

Posted

技术标签:

【中文标题】“未捕获的 RangeError:在 Dt (jquery.min.js:2) 处超出了最大调用堆栈大小”【英文标题】:"Uncaught RangeError: Maximum call stack size exceeded at Dt (jquery.min.js:2)" 【发布时间】:2021-11-27 20:54:56 【问题描述】:

我是使用 django 编程的新手,现在我被困在这个阶段,我必须将数据从 js 变量移动到 Django 视图或其他东西。但目前,如果我尝试使用 ajax post 函数将数据从 js 传递到 Django,它会显示未捕获的范围错误。我不确定我在哪里犯了错误,但是如果有人可以帮助我,那将非常有帮助。真的确实有帮助PLS!!!

错误信息:

Uncaught RangeError: Maximum call stack size exceeded at Dt (jquery.min.js:2)

脚本代码

<script>

    var URL = "% url 'textFromInputFile' %";
    var textOfFile = document.getElementById('fileinput');      
    
        textOfFile.addEventListener('change', function()
            
            var fr = new FileReader();
            fr.onload = function()
                document.getElementById("textarea").value = fr.result;
            ;
            fr.readAsText(this.files[0]);
            
        );            
       
        function getText()  
        
            $.ajax(
                type: "POST",
                url: "/textFromInputFile",
                data: "textOfFile":textOfFile,
                dataType: "String",
                success: function(data)
                    alert("ok")
                ,
                failure:function()
                    alert("failed")
                
            ,);          
        

        
            $('button').click(function()
            getText();
        );

</script>

views.py

def textFromInputFile(request):
if request.method == 'POST':
    if 'textOfFile' in request.POST:
        textOfFile = request.POST['textOfFile']
        #need to do something here
        return HttpResponse('success')  #if everything is o.k
    else:
        return HttpResponse('failed!!')

urls.py

urlpatterns = [
path('', views.index, name='index'),
path('signin.html', views.signin, name='signin'),
path('index.html', views.index, name='index'),
path('home.html', views.home, name='home'),
path('logoutPage.html', views.logout, name='logout'),
path('home.html', views.textFromInputFile, name='textFromInputFile'),

]

【问题讨论】:

该错误意味着您的代码在某处导致了递归循环。问题中的逻辑似乎不是导致此问题的原因 【参考方案1】:

该错误可能是由多次 Ajax 尝试序列化您的 JSON 引起的。所以我们最好在使用 JSON.stringify() 发送之前对其进行序列化 尝试改变你的ajax函数,数据如下:

data:JSON.stringify("textOfFile":textOfFile),

另一种方法就是将这个添加到ajax函数中:

$.ajax(
   type: "POST", url: "/textFromInputFile", 
   data: "textOfFile":textOfFile,
   dataType: "String", 
   success: function(data) 
     alert("ok") 
   , 
   failure:function() 
      alert("failed") 
   ,
   cache: false,
   contentType: false,
   processData: false,
,);

【讨论】:

现在可以使用了。谢谢

以上是关于“未捕获的 RangeError:在 Dt (jquery.min.js:2) 处超出了最大调用堆栈大小”的主要内容,如果未能解决你的问题,请参考以下文章