【问题标题】:jQuery Ajax call No element found issuejQuery Ajax 调用 No element found 问题
【发布时间】:2016-06-02 23:08:45
【问题描述】:

在尝试调用 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 调用本身等中。
  • 你看过萤火虫吗?您似乎从服务器收到了一个完全空的响应。
  • 我认为您的问题需要更多细节,看起来您的服务电话回复中可能存在问题。首先每次都返回完全相同的 XML 文档(不依赖于“id”),看看是否可行,尝试缩小问题范围,然后编辑您的帖子。
  • 是的,我的方法是无效的。那是问题吗?如果我的方法 id 无效,如何在 ajax 调用中调用它。调用方法后我们是否需要从服务器返回一些响应?
  • 这个问题的核心是服务器端没有返回任何内容。 Firefox 似乎至少需要一些内容(例如空格)才能显示 2xx 状态代码。

标签: javascript jquery


【解决方案1】:

我通过将 mimeType 设置为“text/html”解决了这个问题

【讨论】:

  • 这里也一样。在 ajax POST 调用中添加 mimeType: 'text/html' 解决了 IceWeasel 中的问题。
  • AWS S3 PUT 请求返回 200 状态码并且没有 ContentType,因此 jQuery 会抛出此错误。添加dataType: 'text' 无济于事,但也添加mimeType: 'text/html' 会有所帮助。
  • @Justinas 评论是唯一对我有用的(Firefox)
  • 不错的一个 - 为我修复。我不会自己解决这个问题。
【解决方案2】:

ajax 调用期望返回 XML(可能是由于错误的猜测)并尝试解析它,如果没有返回或它不是有效的 XML 则失败。

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


从 cmets 看来,某些浏览器无法处理无内容响应。因此,针对这种情况的解决方法可能是从您的服务中返回某些内容(甚至是一个空格)。

【讨论】:

  • 所以你的意思是说我需要一些像 Teja 所说的东西?
  • @Nimesh,是的 .. 但这取决于您希望从服务中收到什么......是 XML 吗?还是 JSON? HTML ?文字?
  • JSON 是格式。我正在使用 WCF 服务方法上装饰的属性作为 WebMessageFormat.Json
  • @Nimesh,你应该在你的选项中添加dataType: 'json'然后在你的ajax调用中。你还应该使用firebug来检查来自服务器的响应,看看它是否返回你所期望的......
  • Gaby,实际上我的方法从 web 服务返回 null,它是一个 void 方法。所以如果我给出数据类型:json,我能解决这个问题吗?
【解决方案3】:

我遇到了另一个原因 - 可能会对某人有所帮助。

如果您发出 $.ajax 请求(在我的情况下是 PUT 请求),它返回 200 标头但没有正文内容,我看到同样的 XML 解析错误消息出现 - 即使设置了 dataTypejson

(至少)两种解决方案有效:

  • 让所有 API PUT 请求返回一些内容,或者
  • 改为返回 204 'No Content' 标头(我最终做了什么)

【讨论】:

  • 我已经为 DELETE 返回了 204,没有响应正文,我仍然看到这个。 :(
【解决方案4】:

这是一个已知的 FireFox 错误。 https://bugzilla.mozilla.org/show_bug.cgi?id=547718 为了快速解决这个问题,你也许可以返回一个带有 html 结构的响应(但没有内容)。

【讨论】:

  • 我正在返回 html 并将我的 jQuery ajax 设置为具有 dataType:"html",并且我在 Firefox 中也收到此错误。一定是在某个时候引入了一个错误,因为我之前没有这个错误。
【解决方案5】:

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) {

        }
    });
}

【讨论】:

    【解决方案6】:

    您需要将 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();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-03-02
      • 2011-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-31
      • 1970-01-01
      相关资源
      最近更新 更多