我正在尝试让 Breeze.JS 利用 Angular 的 http 服务进行 ajax 调用。我按照文档(http://www.breezejs.com/documentation/customizing-ajax)并应用了它。然而它不起作用。
此外,当我检查 Breeze 源代码时,我看到了以下内容:
fn.executeQuery = function (mappingContext) {
var deferred = Q.defer();
var url = mappingContext.getUrl();
OData.read({
requestUri: url,
headers: { "DataServiceVersion": "2.0" }
},
function (data, response) {
var inlineCount;
if (data.__count) {
// OData can return data.__count as a string
inlineCount = parseInt(data.__count, 10);
}
return deferred.resolve({ results: data.results, inlineCount: inlineCount });
},
function (error) {
return deferred.reject(createError(error, url));
}
);
return deferred.promise;
};
它只是调用 OData.read,而不对 http 服务执行任何操作。因此,OData 使用内置的 ajax。我不明白上面的代码如何定制Breeeze.JS的ajax
最佳答案
问题是 Breeze OData 路径不使用 Breeze Ajax 适配器。更改 Breeze Ajax 适配器(如“Breeze Angular Service”所做的那样)不会有帮助。
目前,“OData”和“webApiOData”DataService 适配器均委托(delegate)给用于 AJAX 服务(以及其他 OData 相关支持)的第 3 方 datajs 库。
您可以将其 odata.defaultHttpClient
替换为您自己的基于 $http
的版本。这不是一个微不足道的任务。 Look here for the source code ;大约有 160 行。
我想我们可以写一个。这并不是一个优先事项。
除非有人这样做或者我们放弃datajs(如果有的话也不会很快),否则您将不得不使用datajs ajax。
抱歉。
附:几乎每个与 OData 数据源交互的人都使用 datajs 库。也许您可以与该库的作者交谈并尝试让他们支持$http
。
关于angularjs - Breeze.JS 使用 angular.js http,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22426240/