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

时间:2013-06-05 06:25:30

标签: javascript ajax jquery

我无法得到ajax的回复。请指导我如何解决这个错误,我从服务器获得成功的数据返回我已经在小提琴web调试器中检查了它,但仍然是ajax显示错误。 XML解析错误:未找到任何元素位置:moz-nullprincipal:{6b0a1ac2-50ab-4053-9f71-8ae49202288d}行号1,第1列:

            $j.ajax({

            type:"POST",
            url:'http://www.w3schools.com/webservices/tempconvert.asmx/CelsiusToFahrenheit',
            data: 'Celsius=12',
            crossDomain:true,
            async: false,
            success:function(response)
            {
                alert("Success Full Done"+response.string);
            },
            beforeSend: function( xhr ) {
 xhr.overrideMimeType( 'text/plain; charset=UTF-8' );
}

        });

7 个答案:

答案 0 :(得分:4)

我遇到了这个问题:

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

在请求中接受标头是:

Accept  application/json, text/javascript, */*; q=0.01

响应状态为200,但浏览器检测到错误并且没有成功回调调用

修正了删除dataType:“json”:

$.ajax({
    type: "POST",
    url: ajaxUrl,
    contentType: "application/json",
    ...

请求中接受标头的唯一区别变为:

Accept  */*

但现在调用成功回调。

答案 1 :(得分:2)

将“beforeSend”函数添加到AJAX调用中以覆盖可接受的响应mime类型。

请参阅jQuery.ajax()文档: http://api.jquery.com/jquery.ajax/

从jQuery 1.5.1开始,jqXHR对象还包含overrideMimeType()方法(它在jQuery 1.4.x中也可用,但在jQuery 1.5中暂时删除)。 .overrideMimeType()方法可以在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()调用的不同类型的响应在传递给成功处理程序之前会受到不同类型的预处理。预处理的类型默认依赖于响应的Content-Type,但可以使用dataType选项显式设置。如果提供了dataType选项,则将忽略响应的Content-Type标头。

答案 2 :(得分:1)

当我拨打GET XMLHttpRequest时,我遇到了同样的问题。

var req = new XMLHttpRequest();
req.open('GET', '/exampleServlet', false);
req.send(null);

通过在HttpServletResponse上设置ContentType来修复它。

 response.setContentType("text/plain");

答案 3 :(得分:1)

此错误可能是由于两个原因造成的。一个是java后端没有响应,另一个是java Controller方法中没有@ResponseBody。

答案 4 :(得分:0)

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

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

答案 5 :(得分:0)

我只是通过一个简单的请求就遇到了同样的问题:

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

就我而言,这是一劳永逸的情况-我不在乎响应。为了解决该问题,需要更改服务器端代码以正确返回204: No content状态代码,而不是返回200: OK

答案 6 :(得分:-1)

经过几年的经验之后,我会直截了当:您的问题可能只是您选择进行编程的环境。我有两个开发环境-VS Code和Netbeans-,出于某种原因,我不知道ajax和其他方法可以在一个而不是另一个中工作。我不知道为什么会这样,但是使用VS Code进行ajax调用将无法正常工作,但是当像最新版本的NetBeans这样的IDE中使用EXACT SAME CODE时,它将完全按照编程的方式工作。在多个编码环境中测试您的代码,因为如果因为像我以前在其他地方发生的一些愚蠢的编码事情而被HOURS所困扰,这不会让我感到惊讶。您的代码可能是FINE,但是这些错误会导致产生怪异的修正,这些修正可能不是真正的修正,而只是怪异的故障解决方法。您的代码很可能就好了,这就是为什么我讨厌像VS Code一样好的产品存在这些故障,因为它是如此之大,与您对编程能力的观念造成了干扰,使您无法进行开发与您的健康成长。对他们没有冒犯,但这些小问题很糟糕...