【问题标题】:Get XML With JQuery from an external source使用 JQuery 从外部源获取 XML
【发布时间】:2023-04-01 07:05:01
【问题描述】:

我想创建一个小网页,询问该服务器 (http://resumemanagerrestserver.juanwolf.cloudbees.net/) 并使用收到的 XML。

但问题是当我这样做时:

var resumes;
jQuery.ajax({
    type: "GET",
    url: "http://resumemanagerrestserver.juanwolf.cloudbees.net/?callback=?",
    contentType: "text/plain; charset=utf-8 ",
    dataType: "xml",
    success: function (data, status, jqXHR) {
        resumes = data;
    },
    error: function (jqXHR, status) {
        // error handler
    }
});

我有这样的回应: ML 解析错误:找不到元素位置:moz-nullprincipal:{2041758e-b063-4f84-898d-2ff62d487a5d} 第 1 行,第 1 列:

我用 Advanced REST 客户端尝试了一个 GET 请求,它可以工作。

如果有人有解决方案,我将不胜感激(并在我的余生中爱他)

编辑

我将旧代码更改为:

function getResumes() {
    var resumes;
    var url = 'http://resumemanagerrestserver.juanwolf.cloudbees.net/?callback=?';

    var xhr = createCORSRequest('GET', url);
    xhr.onreadystatechange = function() {if (xhr.readyState==4) alert("It worked!");};
    xhr.setRequestHeader("Content-type", "application/xml");
    xhr.setRequestHeader("Connection", "close");
    if (!xhr) {
      alert('CORS not supported');
      return;
    }

    // Response handlers.
    xhr.onload = function() {
      resumes = xhr.responseText;
      alert('Response from CORS request to ' + url + ': ' + resumes);
    };

    xhr.onerror = function() {
      $('#errorPopupLink').get(0).click();
    };

    xhr.send();
    return resumes;

}

现在,Firebug 中的请求不是红色的,但我仍然有这个

 XML Parsing Error: no element found Location: moz-nullprincipal:{d9ee4013-542d-4f65-a310-e1719d99bcae} Line Number 1, Column 1

有人有解决办法吗?

【问题讨论】:

  • 我遇到了同源错误,所以你可能不能这样做。
  • 正如 adeneo 所写,您可能对同源策略有问题。如果您将调用页面和脚本放在同一域resumemanagerrestserver.juanwolf.cloudbees.net 上,请测试它是否有效。另见:ways to circumvent the same-origin policy
  • 这可能是问题所在。我以为第一页告诉浏览器 AJAX-Requests 可能会离开域。
  • 我找到了解决方案。我感到有点羞愧,但现在它很好用。我忘了在服务器端为 GET 请求添加标头,我只是将它用于 PUT 请求...
  • 您应该解释解决您的问题的原因作为答案,以便其他人可以学习。 :)

标签: javascript jquery xml spring cors


【解决方案1】:

我的问题的答案很简单。问题来自服务器。 编辑部分的代码客户端是对的。

这里的服务器(http://resumemanagerrestserver.juanwolf.cloudbees.net/)是一个使用 Spring 的 JEE 服务器。 事实是,如果您不允许外部客户端使用您自己的资源(请参阅http://en.wikipedia.org/wiki/Cross-origin_resource_sharing),它们将被阻止。所以我只是将 CORS 头添加到 get* 函数中,现在它运行良好。

如果您正在寻找如何使用 spring 创建 CORS 标头,这篇文章可以帮助您:http://zhentao-li.blogspot.fr/2012/06/enable-cors-support-in-rest-services.html

【讨论】:

    猜你喜欢
    • 2018-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多