无法使用removeChild而不出现Uncaught TypeError:Cannot read property 'removeChild' of null

4
我不使用 removeChild(),也不会在有东西之前尝试删除任何东西。
jquery-3.3.1.min.js:2 Uncaught TypeError: Cannot read property 'removeChild' of null
    at m (jquery-3.3.1.min.js:2)
    at Function.globalEval (jquery-3.3.1.min.js:2)
    at text script (jquery-3.3.1.min.js:2)
    at Ut (jquery-3.3.1.min.js:2)
    at k (jquery-3.3.1.min.js:2)
    at XMLHttpRequest.<anonymous> (jquery-3.3.1.min.js:2)
    at Object.send (jquery-3.3.1.min.js:2)
    at Function.ajax (jquery-3.3.1.min.js:2)
    at Function.w._evalUrl (jquery-3.3.1.min.js:2)
    at Re (jquery-3.3.1.min.js:2)

我使用$.ajax接收HTML内容,然后使用.html()将其放入一个

容器中。

$(".kontakt").click(function(a) {
      $('.opt-out').fadeOut();
      a.stopPropagation()
      a.preventDefault()

      $.ajax({async: true,
      type: "POST",
       url: "classes/handle.ajax.class.php",
       data: {
            class: "kontakt"
       },
       success: function(a) {
         $(".link-container").html(a)
         $('.link-container').fadeIn();
         blur();
       }
     })
})

JavaScript 停在哪一行? - Mohammad
@Mohammad JavaScript 没有停止。 - J.Doe
1个回答

3

查看源代码,我找到了ajax的设置方法:

jQuery.ajaxSetup( {
    accepts: {
        script: "text/javascript, application/javascript, " +
            "application/ecmascript, application/x-ecmascript"
    },
    contents: {
        script: /\b(?:java|ecma)script\b/
    },
    converters: {
        "text script": function( text ) {
            jQuery.globalEval( text ); /* note to this method */
            return text;
        }
    }
} );

那么,让我们来看一下globalEval方法:

globalEval: function( code ) {
  DOMEval( code );
},

现在让我们深入了解DOMEval方法:

function DOMEval( code, doc, node ) {
  doc = doc || document;

  var i,
    script = doc.createElement( "script" );

  script.text = code;
  if ( node ) {
    for ( i in preservedScriptAttributes ) {
      if ( node[ i ] ) {
        script[ i ] = node[ i ];
      }
    }
  }
  /* removeChild is being called */
  doc.head.appendChild( script ).parentNode.removeChild( script );
}

在这里,您可能知道parentNode为null并且在null上调用removeChild会引发错误。在前面的代码中,您可以看到script已分配了text属性,其值设置为codecodeDOMEval方法的参数。实际上,您可以在ajaxSetup中找到作为text参数的codeajaxSetupajax方法上被调用(您可以查看源代码)。它具有urloptions参数。在options参数中,您可以找到使用dataType属性。如果未设置dataType,则它将猜测其类型,其中服务器可能返回null{}响应。
因此,我建议您在使用jQuery.ajax时设置正确的dataType。这应该解决您的问题。
更新:
好吧,如果服务器返回的响应格式不正确,那么它也可能会引发错误。因此,请验证服务器是否返回良好的响应。根据您的评论,我调试了代码并发现响应不太好。
您的响应中还包含以下html,这也是问题的原因:
<head>
<meta name='robots' content='noindex'>
</head>

请将它们从响应源中删除,然后问题就会得到解决。

我已将它添加到我的ajax调用中,但什么也没有改变 :/$.ajax({async: true, type: "POST", url: "classes/handle.ajax.class.php", dataType: "text", data: { class: "kontakt" }, success: function(a) { $(".link-container").html(a) $('.link-container').fadeIn(); blur(); } }) - J.Doe
即使我使用ProcessData = html,什么都没有改变。 奇怪的是在本地主机上我没有遇到这个错误... - J.Doe
也许这个网站链接可以帮到你。https://photo.core-studio.de/ 这种情况发生在你点击“Datenschutz”、“Urheberschaft”和“Impressum”时,而不是“Kontakt”。 - J.Doe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接