You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

jQuery报错:Uncaught TypeError: Illegal invocation 求助

解决Uncaught TypeError: Illegal Invocation错误(POST XML数据时)

这个错误我之前调试XML接口的时候也踩过坑!问题根源在于你直接把$.parseXML()返回的XML DOM对象传给了$.ajax的data参数——jQuery没办法正确处理这类DOM对象的序列化,直接传就会触发"非法调用"的错误。

修复方案:把XML DOM对象转换成字符串

jQuery的data参数如果传入字符串,会直接将其作为请求体发送,刚好符合application/xml的内容格式要求。我们可以用XMLSerializer把XML对象转成字符串:

$(document).ready(function() {
    // 解析XML字符串得到DOM对象
    var xmlDoc = $.parseXML("<authenticationDetail><userName>username</userName><password>passw</password></authenticationDetail>");
    // 把DOM对象转换成XML字符串
    var xmlString = new XMLSerializer().serializeToString(xmlDoc);
    var url = "http://127.0.0.1:8000/thelogin.ws";
    
    $.ajax({
        data: xmlString,
        type: "POST",
        contentType: "application/xml",
        url: url,
        dataType: "xml",
        success: function(response) {
            // 处理成功响应
            console.log("登录成功", response);
        },
        error: function(xhr, status, error) {
            // 处理错误
            console.error("请求失败", error);
        }
    });
});

为什么这样能解决?

$.parseXML()返回的是一个标准的XML Document DOM对象,而jQuery的AJAX内部会对data参数做判断:如果不是字符串、普通对象或数组,它会尝试调用一些对象方法来序列化,而DOM对象的方法调用会触发浏览器的安全限制,导致"Illegal invocation"错误。转换成字符串后,就完全符合AJAX对请求体的处理逻辑了。

内容的提问来源于stack exchange,提问作者user9597092

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:14:49