使用Dojo从跨域检索ReST服务的XML数据

时间:2012-11-08 06:47:26

标签: ajax rest dojo

我正在尝试为ReST应用程序编写一个基于浏览器的Javascript客户端,该应用程序使用XML进行响应(因此似乎JSONP不在问题中)。

我正在尝试使用dojo.io.script.get检索数据,但传递给回调函数的参数是一个对象,我似乎无法从中检索响应的XML数据。

dojo.io.script.get({url:"http://enterpriseapp.enterprisedomain/path/to/rest/collection",
    load:function (data) {
        // 'data' does not contain the actual response (which is XML)
    }
});

检索此数据的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

dojo.io.script.get 方法会注入一个< script>来自指定的网址。此脚本中的数据内容将传递给您的加载函数;因此,内容必须验证为Javascript。您无法将XML加载到脚本标记中。

如果要加载XML,则需要使用 dojo.xhrGet ;但是,这不允许向第三方网址发出请求。使用 dojo.io.script.get 的优点是,您可以使用与加载它们的页面不同的原始地址。

dojo.xhrGet({
    handleAs: "xml",
    load: function(dom){
        // do something with the DOM XML object
    },
    error: function(error){
    }
});

请参阅:dojo.xhrGet Documentation

如果您尝试从其他网站加载XML,那将是一个死胡同。如果您有权访问发送服务器,则可以使用 Access-Control-Allow-Origin 标头。

我使用的另一个解决方案是编写代理脚本(使用PHP或其他服务器语言)来镜像正确域上的XML。如果你这样做,你需要小心,以包括良好的检查,以便你的服务器代码不会被代理人滥用代理。

有关Access-Control-Allow-Origin的更多信息,请参阅以下Stackoverflow对话:
jQuery XML REST Access-Control-Allow-Origin