我想使用dojo消费Restful webservice。 webservice的结果是在浏览器上返回的,但是当我尝试使用xhr得到结果时,我总是得到一个空值,所以请帮助我在dojo中新来...
dojo.query("li").onclick(function(){
var xhrArgs = {
url: "http://192.168.1.65:9080/RAD8JAX-RSWeb/jaxrs/customers",
handleAs: "json",
headers: { "Content-Type": "application/json"},
load: function(data) {
alert("ok");
console.log(data);
},
error: function(error) {
console.log(error);
}
};
dojo.xhrGet(xhrArgs);
console.log("message sent ...");
});
当事件发生时,警报显示,我得到“null”
答案 0 :(得分:3)
实际上,dojo.data API比新dojo.store APIs(自1.6以来可用)更具限制性。
为了使用宁静的网络服务,我的建议是使用dojo.store.JsonRest商店。无需特定的Json格式。
以下是JsonRest用法的一个很好的例子:http://dojotoolkit.org/documentation/tutorials/1.7/store_driven_tree/
答案 1 :(得分:2)
Dojo使用'stores'从服务器获取数据。这些商店外出并懒惰地获取数据,所以只有当你第一次请求它时。每当您的JavaScript代码需要数据时,它都可以询问商店,如果它已经提取了它,它将返回它,否则它将出去并获取它。
由于商店的异步性质,您需要在每次需要数据时进行异步调用。
在您的情况下,您可以执行以下操作:
// Create the store for later use
var store = new dojo.data.ItemFileReadStore({
contentType: 'application/json'
,clearOnClose: true
,urlPreventCache: true
,url: "http://192.168.1.65:9080/RAD8JAX-RSWeb/jaxrs/customers"
});
每次你需要从商店获取数据时:
store.fetch({
onItem: function(item, request) {
alert('I fire after each returned json item')
}
,onComplete: function(items, findResult) {
alert('I fire when the data has loaded completely.');
}
,onError: function(error, request) {
alert('I fire when an error occurs');
}
});
只有第一次将请求发送到服务器。所有其他请求将从商店缓存中提供。如果要刷新缓存,则需要“关闭”商店。下次在商店中调用fetch将导致向服务器发出新请求。您可以这样关闭它:
store.close();
商店旨在以数据技术透明的方式提供服务器数据。所以你服务json,xml或csv并不重要:它将全部加载到商店并以同样的方式提供给你。你只需要知道两件事:
有许多类型的商店,ItemFileReadStore只是一个例子。
希望这有帮助