7

我无法从 ajax 得到响应。请指导我如何解决此错误,我从服务器成功返回数据,我已在fiddle 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' );
}

        });
4

7 回答 7

5

我的请求有这个问题:

$.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,但浏览器检测到错误且未调用成功回调

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

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

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

Accept  */*

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

于 2015-04-22T21:14:52.360 回答
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 标头将被忽略。

于 2017-10-24T21:49:03.513 回答
1

GET XMLHttpRequest打电话时遇到了同样的问题。

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

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

 response.setContentType("text/plain");
于 2017-06-21T14:20:13.397 回答
1

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

于 2018-05-18T05:53:50.747 回答
0

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

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

就我而言,这是一个即发即弃的场景——我不在乎反应。为了解决这个问题,需要更改服务器端代码以正确返回204: No content状态代码,而不是返回200: OK.

于 2020-10-02T19:39:53.880 回答
0

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

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

于 2018-10-23T14:46:28.743 回答
-2

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

于 2019-05-12T18:16:59.627 回答