4

这是我xml从网站访问的代码

$(document).ready(function () {
    $.ajax({
        type: "GET",
        url: "http://rxnav.nlm.nih.gov/REST/Ndfrt/search?conceptName=TESTOSTERONE",
        dataType: "xml",
        success: xmlParser

      });
});

function xmlParser(xml) { 
    $(xml).find("entry").each(function () {
        $(".entirecont").append($(this).find('inputConceptName').text());
    });
}

当我将此代码推送到生产环境时,它在本地运行良好,这给了我跨域限制。

这是JsFiddle

我知道这是一个跨域请求,但是,我该如何解决?

谢谢

4

4 回答 4

9

使用 XML,对于真正的跨域请求,您唯一真正的选择是该服务器是否支持CORS,允许您的来源,并且您的浏览器支持它。(不过,如果他们有JSONP选项,那会更容易。但遗憾的是,快速浏览他们的 API 页面表明他们只支持 XML 和 JSON,而不支持 JSONP。但是请自行寻找,不要相信我的话,我没有仔细阅读。在我看来,如果他们支持 JSON 但不支持 JSONP,那就有点奇怪了。)

我有时听说过但已经做过的另一个选择是使用YQL作为跨域代理

当然,您也可以运行自己的服务器,向发出请求,然后让它查询 rxnav.nlm.nih.gov 提要并将其返回给您。然后 SOP 就没有了。

旁注:要在 IE8 或 IE9 中将 CORS 与 jQuery 一起使用,您需要一个使用特殊对象处理的插件XDomainRequest(IE8 和 IE9 的XMLHttpRequest对象不执行 CORS)。IE10 终于解决了这个问题。

于 2013-01-28T10:57:49.120 回答
0

您只能在跨域请求中使用CORS或。JSONP获取 XML 的 AJAX 请求将无法跨域工作

解决方法是使用 PHP/ASP.Net/选择的语言在本地服务器上创建服务器端代理,然后通过 AJAX 调用它。

于 2013-01-28T10:57:40.927 回答
0

您不能通过 ajax(期望 json)发出跨域请求。

我建议您发出本地 ajax 请求,并在服务器端连接到跨域服务器以获取您需要的数据。

于 2013-01-28T10:57:54.163 回答
0

您可以使用来自https://github.com/flensed/flXHR的 flxhr来运行跨域 ajax 调用

要使用的示例代码

function crossDomainCall(){
    var flproxy = new flensed.flXHR({
        autoUpdatePlayer: true,
        instanceId: "myproxy1",
        onerror: handleError,
        onreadystatechange: handleCrossDomainCall
    });
    flproxy.open("POST", url);
    flproxy.send(null);
}

function handleCrossDomainCall(XHRobj){
    if (XHRobj.readyState == 4) {
        var xmlDoc = XHRobj.responseXML;
        //
    }
}
于 2013-01-28T11:10:17.177 回答