Javascript ajax响应错误(XML解析错误:未找到元素位置:moz nullprincipal)

Javascript ajax响应错误(XML解析错误:未找到元素位置:moz nullprincipal),javascript,ajax,jquery,Javascript,Ajax,Jquery,我无法从ajax获得响应。请指导我如何解决此错误,我正在从服务器成功返回数据,我在fiddle web debugger中对其进行了检查,但ajax仍然显示错误。 XML分析错误:未找到元素位置:moz nullprincipal:{6b0a1ac2-50ab-4053-9f71-8ae49202288d}行号1,第1列: 我对请求有以下问题: $.ajax({ type: "POST", url: ajaxUrl, dataType : "json", cont

我无法从ajax获得响应。请指导我如何解决此错误,我正在从服务器成功返回数据,我在fiddle web debugger中对其进行了检查,但ajax仍然显示错误。 XML分析错误:未找到元素位置:moz nullprincipal:{6b0a1ac2-50ab-4053-9f71-8ae49202288d}行号1,第1列:


我对请求有以下问题:

$.ajax({
    type: "POST",
    url: ajaxUrl,
    dataType : "json",
    contentType: "application/json",
    data: JSON.stringify(data),
    success: function (data) {
         ...
    }
});
请求中的Accept标头为:

Accept  application/json, text/javascript, */*; q=0.01
响应状态为200,但浏览器检测到错误且未调用成功回调

由删除数据类型“json”修复:

请求中accept标头的唯一区别更改为:

Accept  */*

但是现在调用了成功回调。

我在调用
GET
XMLHttpRequest
时遇到了相同的问题

var req = new XMLHttpRequest();
req.open('GET', '/exampleServlet', false);
req.send(null);
通过在HttpServletResponse上设置ContentType修复了该问题

 response.setContentType("text/plain");
将“beforeSend”函数添加到AJAX调用中,以覆盖可接受的响应mime类型

请参阅jQuery.ajax()文档:

从jQuery1.5.1开始,jqXHR对象还包含overrideMimeType()方法(它在jQuery1.4.x中也可用,但在jQuery1.5中被临时删除)。.OverrideMemetype()方法可用于beforeSend()回调函数,例如,修改响应内容类型标头:

$.ajax({
  url: "http://fiddle.jshell.net/favicon.png",
  beforeSend: function( xhr ) {
    xhr.overrideMimeType( "text/plain; charset=x-user-defined" );
  }
})
  .done(function( data ) {
    if ( console && console.log ) {
      console.log( "Sample of data:", data.slice( 0, 100 ) );
    }
  });
以及:

数据类型


对$.ajax()调用的不同类型的响应在传递给成功处理程序之前会经历不同类型的预处理。默认情况下,预处理的类型取决于响应的内容类型,但可以使用dataType选项显式设置。如果提供了数据类型选项,则响应的内容类型标题将被忽略。

此错误可能由两个原因引起。一个是当java后端没有响应时,另一个是当java控制器方法中没有@ResponseBy时。

我在ResponseEntity中添加了ContentType并解决了问题。尝试将有效的ContentType添加到控制器响应:


ResponseEntity.ok().contentType(MediaType.TEXT_PLAIN).build()

经过几年的经验,我将直截了当地说:您的问题可能只是您选择的编程环境。我有两个开发环境——VS代码和Netbeans——出于某种原因,我不知道ajax和其他方法在一个环境中工作,而不是在另一个环境中工作。我不知道为什么会这样,但是对于VS代码,ajax post调用将不起作用,但是当在IDE中使用完全相同的代码时,就像最新版本的NetBeans一样,它完全按照编程的方式工作。跨多个编码环境测试您的代码,因为如果您仅仅因为像我一样在其他地方发生的一些愚蠢的编码事情而被这几个小时搞得一团糟,我也不会感到惊讶。您的代码可能很好,但这些错误会导致奇怪的修复,这些修复可能不是真正的修复,而是奇怪的小故障解决方法。你的代码很可能就这么好,这就是为什么我讨厌像VS代码这样好的产品出现这些小故障,因为尽管它很好,但它扰乱了你对编程能力的概念,阻碍了你随着进度健康地进步。我无意冒犯他们,但这些小故障很糟糕……

我只是在一个简单的请求中遇到了同样的问题:

$.ajax({
    type: "POST",
    url: something,
    data: JSON.stringify(data),
    contentType: "application/json"
});

在我的情况下,这是一个火灾和遗忘的场景-我不关心的反应。要解决这个问题,需要更改服务器端代码以正确返回
204:No content
状态代码,而不是返回
200:OK

检查此链接:链接现在位于:you's right,我是从servlet执行的,它成功了。真的没有理由不喜欢,因为我现在正在做一个项目,就是这样。
$.ajax({
  url: "http://fiddle.jshell.net/favicon.png",
  beforeSend: function( xhr ) {
    xhr.overrideMimeType( "text/plain; charset=x-user-defined" );
  }
})
  .done(function( data ) {
    if ( console && console.log ) {
      console.log( "Sample of data:", data.slice( 0, 100 ) );
    }
  });
$.ajax({
    type: "POST",
    url: something,
    data: JSON.stringify(data),
    contentType: "application/json"
});