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
相关产品推荐
相关产品推荐

