我正在使用以下代码从sharepoint中检索数据。
RESTQueries.getItemsFromList = function(){
var deferred = $.Deferred();
var execute = function(listName,itemId){
if(typeof(listName)=='undefined' || listName.length==0 ){
deferred.reject('getItemsFromList - no proper list name');
return deferred;
}
var formatUrl = currentSiteUrl;
formatUrl = (formatUrl.lastIndexOf('/')==(formatUrl.length-1))?formatUrl:(formatUrl+'/');
var _url = (typeof(itemId)=='undefined' || itemId=='0')? (formatUrl+"_api/web/lists/getByTitle('"+listName+"')/items") : (formatUrl+"_api/web/lists/getByTitle('"+listName+"')/items("+itemId+")");
$.ajax({
url: _url,
method:'GET',
headers:{Accept:'application/json; odata=verbose'},
success:function(data){
deferred.resolve(data);
},
error:function(err){
deferred.reject(err.responseJSON.error.message.value);
}
});
return deferred;
};
return {
execute:execute
}
}();
要执行此功能,我称之为
RESTQueries.getItemsFromList.execute('Pages').done(function(data){
console.log(data);
});
这样可以毫无问题地给出结果。 但问题是,如果我第二次称它为不同的库,
RESTQueries.getItemsFromList.execute('Students').done(function(data){
console.log(data);
});
在这种情况下,结果也与第一次请求相同。 我认为一些缓存响应的地方。如何清除每个请求的响应?
答案 0 :(得分:1)
从实例
开始var deferred = $.Deferred();
在execute
函数范围的外部创建。当第二次调用execute
函数时,将为前一次调用中已解析的Deferred对象调用done
方法。
<强>解决方案强>
将deferred
对象的声明移动到execute
函数的范围:
var execute = function(listName,itemId){
var deferred = $.Deferred();
//...
};
答案 1 :(得分:0)
尝试在Ajax调用中包含此内容:
$.ajax ({
...
cache: false,
...
});