使用 JQuery 从外部源获取 XML

Posted

技术标签:

【中文标题】使用 JQuery 从外部源获取 XML【英文标题】:Get XML With JQuery from an external source 【发布时间】:2014-05-26 16:39:56 【问题描述】:

我想创建一个小网页,询问该服务器 (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 请求... 您应该解释解决您的问题的原因作为答案,以便其他人可以学习。 :) 【参考方案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

【讨论】:

以上是关于使用 JQuery 从外部源获取 XML的主要内容,如果未能解决你的问题,请参考以下文章

html + google.maps.InfoWindow() + 外部源 xml 文档 (XMLHttpRequest)

如何在 AnyLogic 7 中从外部源获取资源容量?

如何通过 API “input type='file'” 标签使用本地文件更改视频源...没有 Jquery 或外部库

如何从 onchange 事件外部获取 jQuery UI 自动完成值?

iOS 应用程序 - 如何从外部源更改启动图像?

jQuery / PHP - 从外部页面嵌入图像