jQuery Ajax调用未找到元素问题

22

当我尝试调用ajax方法时,在Firefox 3.5上出现了javascript错误。

请查看以下错误信息:

XML Parsing Error: no element found Location: moz-nullprincipal:{1a2c8133-f48f-4707-90f3-1a2b2f2d62e2} Line Number 1, Column 1:

^

这是我的 JavaScript 函数:

function Update(Id) {
    $.ajax({
        type: "GET",
        url: ROOT_URL + "/sevice/udates.svc/Update?Id=" + Id,
        success: function(response) {

        },
        async: false
    });
}

你知道你的服务是否被调用了吗?也许返回值有问题。请告诉我们您在哪里看到错误——是在成功处理程序中、在ajax调用本身中还是其他地方。 - David Hoerster
2
你看过Firebug吗?看起来你从服务器那里得到了完全空的响应。 - Nick Craver
1
我认为你的问题需要更多的具体信息,看起来你的服务调用响应中可能存在问题。首先每次返回完全相同的XML文档(不依赖于“id”),看看是否有效,尝试缩小问题范围,然后编辑你的帖子。 - walnutmon
1
是的,我的方法是void。这是问题吗?如果我的方法是void,如何在ajax调用中调用它?在调用方法后,是否必须从服务器获得一些响应? - nimi
这个问题的核心在于服务器端没有返回任何内容。Firefox似乎需要至少一些内容(例如一个空格)来表示2xx状态码。 - Graham Lea
6个回答

25

我通过将 mimeType 设置为 "text/html" 来解决了问题


一样。将 mimeType: 'text/html' 添加到 ajax POST 调用中解决了 IceWeasel 中的问题。 - Laurimann
6
AWS S3 PUT请求返回200状态码和无ContentType,导致jQuery抛出此错误。添加dataType: 'text'并不能解决问题,但同时添加mimeType: 'text/html'可以解决。 - Justinas
@Justinas的评论对我(Firefox)有效。 - Motoko
不错 - 对我有帮助。我自己可能想不到这个解决方法。 - RichColours

19

这个 Ajax 调用期望返回 XML(也许是猜错了),并尝试解析它,如果没有返回内容或者不是有效的 XML,则解析失败。

使用 dataType 选项指定响应的格式。


从评论中可以看出,一些浏览器无法处理没有内容的响应。因此,在这种情况下的一个解决方法可能是从你的服务中返回一些东西(即使只有一个空格)。


@Nimesh,是的,但这取决于你期望从服务端收到什么数据类型。是 XML?还是 JSON?HTML?文本? - Gabriele Petrioli
Gaby,实际上我的方法从webservice返回null,它是一个void方法。所以如果我给出数据类型:json,我能解决这个问题吗? - nimi
我已经尝试过dataType为text和json,但都没有解决这个问题。 - Graham Lea
@GrahamLea,您尝试过最后两条评论中的建议吗? - Gabriele Petrioli
@GabyakaG.Petrioli 是的,最终我只是返回了一个空格,这样就可以了。数据类型似乎并不重要,但它是被接受的答案。也许你可以把这部分解决方案加入到你的答案中? - Graham Lea
显示剩余6条评论

10

我发现这个问题可能有另一种原因-可能会帮助到某些人。

如果你进行一个 $ .ajax 请求(在我的情况下是一个 PUT 请求),它返回一个200头但没有正文内容,我看到了同样的XML解析错误消息-即使 dataType 设置为 json

至少有两个解决方案:

  • 让所有API PUT 请求返回一些内容,或
  • 改为返回204“无内容”标头(最终我选择了这种方法)

3
我已经返回了一个没有响应主体的204状态码以响应DELETE请求,但我仍然看到这个问题。 :( - Graham Lea
我猜这是我正在使用的PATCH请求的问题。旧版本的浏览器不支持它。 - Jamshaid K.

5

我正在返回HTML,并且我的jQuery ajax设置为dataType: "html",在Firefox中也收到了此错误。肯定是某个时候引入了错误,因为我以前没有这个错误。 - Michael K
这似乎是正确的答案,使用Mozilla Firefox 46,它无法解析PATCH请求。 - Jamshaid K.

0

async 也是选项的一部分。同时将 dataType 指定为 xml

function Update(Id) {
    $.ajax({
        type: "GET",
        async: false,
        dataType: "XML",
        url: ROOT_URL + "/sevice/udates.svc/Update?Id=" + Id,
        success: function(response) {

        }
    });
}

0

您需要将 HTML 文档发送到输出(在您的情况下为更新服务 udates.svc)。如果您使用 ASP.NET,可以执行以下操作:

Response.Clear();
Response.Write("<html xmlns=”http://www.w3.org/1999/xhtml”>");
Response.Write("<head><title></title></head>");
Response.Write("<body>");
Response.Write("your output");
Response.Write("</body>");
Response.Write("</html>");
Response.ContentType = "text/HTML";
Response.End();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接