我不断收到此错误,XML解析错误:语法错误,但网站仍然运行良好

Rob*_*bie 4 javascript xml ajax jquery servlets

我是开发网站的新手。我知道我必须在web.xml文件中映射servlet。web.xml文件是这个

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
    <display-name>TestApp</display-name>
    <welcome-file-list>
     <welcome-file>index.html</welcome-file>
     <welcome-file>index.htm</welcome-file>
     <welcome-file>index.jsp</welcome-file>
     <welcome-file>default.html</welcome-file>
     <welcome-file>default.htm</welcome-file>
     <welcome-file>default.jsp</welcome-file>
    </welcome-file-list>
    <servlet>
     <servlet-name>Serve</servlet-name>
     <servlet-class>Serve</servlet-class>
    </servlet>
    <servlet-mapping>
     <servlet-name>Serve</servlet-name>
     <url-pattern>/TestApp</url-pattern>
    </servlet-mapping>
   </web-app>
Run Code Online (Sandbox Code Playgroud)

但是,当我调用jquery $ .ajax()函数时,出现此错误。

XML分析错误:语法错误位置:http:// localhost:8080 / TestApp / Serve 行号1,列1:

AJAX呼叫为

    $.ajax({
    url: "Serve",
    type: "POST",
    success: function(out){
        alert(out);
    },
    error: function(){
        alert("No");
    }
});
Run Code Online (Sandbox Code Playgroud)

问题是servlet仍然可以正常运行。警报(按预期)工作。请解释为什么浏览器显示错误,并请告诉我一个解决方案。

如果这是重复的问题,请提供原始问题的链接。

Cho*_*wao 14

我最近遇到了同样的问题。jQuery似乎可以正确处理数据和dataType,但是Firefox返回了语法错误,这说明了为什么代码按预期执行但仍向控制台输出错误。

如果在开发人员控制台中查看,则可以看到Firefox将纯文本数据解释为另一种格式(可能是XML)。Firefox厌倦了将数据解析为XML,但是不能这样做,因为它不是有效的XML,从而导致“语法错误”被打印到控制台。

为我解决此问题涉及编辑服务器,因此它返回以下标头:

Content-Type: "text/plain"

这似乎只是Firefox的问题,Chrome并未遇到此问题。这里有一个Firefox错误,似乎可以解决这个问题。

资源


tgl*_*las 9

该问题在 Firefox 70 中仍然存在,至少在从文件系统请求文件时是这样。不需要 jquery,可以使用普通的XMLHttpRequest. overrideMimeType之前调用它的方法send为我解决了这个问题。对我来说看起来是一个非常干净的解决方案。例子:

var xhr = new XMLHttpRequest();
xhr.open("GET", window.location, true);
xhr.overrideMimeType("text/html");
xhr.onreadystatechange = function()
{
    if (xhr.readyState == 4) alert(xhr.responseText);
}
xhr.send();
Run Code Online (Sandbox Code Playgroud)