作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我将 BreezeJS 与 Angular 结合使用,以使用来自 SAP Netweaver 网关系统提供的 Restful OData 服务的数据。应用程序当前正在从服务中正确读取数据,包括元数据,并按预期将其全部保存在 EntityManager 中。
但是,当我更改其中一个实体的状态并执行 saveChanges() 时,既不会调用成功回调也不会调用失败回调,而是显示控制台错误。
Uncaught TypeError: Cannot read property 'statusText' of undefined
调用保存的代码如下
$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。
代码在服务器上被缩小,因此很难调试,但它被放入了一个核心 breeze 库中。
客户端正在向服务器执行 $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--
我希望这是这里的某个人以前见过的东西!
最佳答案
最后,这被证明是 SAP Netweaver Gateway 处理 OData 的一个怪癖。它在不应该发送 header 时发送 header ,并将“Content-ID” header 作为 content-id 发送。
为了解决这些问题,我最终不得不在 datajs1.1.1 中的 readBatch 方法中添加行
if (response.statusCode >= 200 && response.statusCode <= 299) {
partHandler(context.handlerContext).read(response, context.handlerContext);
} else {
// Keep track of failed responses and continue processing the batch.
response = { message: "HTTP request failed", response: response };
}
到
if (response.statusCode >= 200 && response.statusCode <= 299) {
if (response.statusCode != 204)
partHandler(context.handlerContext).read(response, context.handlerContext);
} else {
// Keep track of failed responses and continue processing the batch.
response = { message: "HTTP request failed", response: response };
}
并更改 breeze.debug.js 的第 15176 行
var contentId = cr.headers["Content-ID"];
到
var contentId = cr.headers["content-id"];
这解决了问题并确保响应得到正确处理。
关于javascript - BreezeJs,saveChanges() - 未捕获的类型错误 : Cannot read property 'statusText' of undefined,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23344362/
我是一名优秀的程序员,十分优秀!