【发布时间】:2020-12-27 07:28:04
【问题描述】:
我正在使用带有 Angular 的 BreezeJS 来使用来自 SAP Netweaver 网关系统提供的 Restful OData 服务的数据。应用程序当前正在从服务中正确读取数据,包括元数据,并按预期将这些数据保存在 EntityManager 中。
但是,当我更改其中一个实体的状态并执行 saveChanges() 时,既不会调用成功回调也不会调用失败回调,而是显示控制台错误。
Uncaught TypeError: Cannot read property 'statusText' of undefined
调用save的代码如下
$scope.doSave = function(){
$scope.purchases[0].Requester = "Dave" ;
$scope.items[0].Description = "New Description";
if (!$scope._isSaving)
{
console.log("Saving!");
$scope._isSaving = true;
manager.saveChanges().then(function(data){
console.log("Saved");
console.log(data);
$scope._isSaving = false;
}, function(error){
console.log(error);
$scope._isSaving = false;});
}
}
其中 manager 是标准的 Breeze EntityManager。
代码在服务器上被缩小,因此很难调试,但这是在一个核心微风库中抛出的。
客户端正在向服务器执行 $batch POST 请求,服务器响应 202 Accepted,如下所示
--0DD0586DB234C0A3D0D530A25CD1C8400
Content-Type: multipart/mixed; boundary=0DD0586DB234C0A3D0D530A25CD1C8401
Content-Length: 519
--0DD0586DB234C0A3D0D530A25CD1C8401
Content-Type: application/http
Content-Length: 111
content-transfer-encoding: binary
HTTP/1.1 204 No Content
Content-Type: text/html
Content-Length: 0
dataserviceversion: 2.0
content-id: 1
--0DD0586DB234C0A3D0D530A25CD1C8401
Content-Type: application/http
Content-Length: 111
content-transfer-encoding: binary
HTTP/1.1 204 No Content
Content-Type: text/html
Content-Length: 0
dataserviceversion: 2.0
content-id: 2
--0DD0586DB234C0A3D0D530A25CD1C8401--
--0DD0586DB234C0A3D0D530A25CD1C8400--
我希望这是这里的某个人以前见过的东西!
【问题讨论】:
-
您是否在代码中某处检查 statusText 的值?
-
你应该展示微风管理器如何获取实体,你如何改变它们
-
嗨,感谢 cmets。自从我发布了这个我已经设法通过它来调试我的方式,问题似乎是返回的数据具有“Content-Type:text/html”以及 204 No Content 标头。 DataJS 将其解释为有数据,因为它有一个 Content-Type 从而导致它尝试读取数据然后因此失败,因为它没有用于 text/html 类型的处理程序,这会传播回 Breeze 而不是响应对象它期望它在 insead 收到一个字符串“没有此数据的处理程序”,它试图检查这个的 statusText 并失败。
-
不太确定如何解决这个问题,因为我无法在此处更改服务器行为。
标签: javascript angularjs odata breeze sap-gateway