gpt4 book ai didi

javascript - BreezeJs,saveChanges() - 未捕获的类型错误 : Cannot read property 'statusText' of undefined

转载 作者:行者123 更新时间:2023-11-30 12:43:51 26 4
gpt4 key购买 nike

我将 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com