【问题标题】:How to catch (and display on the client) server-side OData business validation errors in JayData using AngularJs如何使用 AngularJs 在 JayData 中捕获(并在客户端显示)服务器端 OData 业务验证错误
【发布时间】:2013-10-25 10:04:53
【问题描述】:

如果我使用这样的代码(来自:http://jaydata.org/blog/jaydata-and-angularjs-continued):

$scope.saveChanges = function () {

$scope.northwind.saveChanges()
.then(function () {
  $scope.selectedProduct = null;
},function() {
  $scope.northwind.stateManager.reset();
});

};

如何捕获服务器可能返回的任何服务器端业务验证错误?

【问题讨论】:

  • 第二个回调函数在出错的情况下被调用,并且该函数应该收到返回的信息...我们很快就会有基于 $metadata 的自动客户端验证
  • 谢谢,这就是我一直在寻找的答案 :) 我确实尝试过查看 API 文档,但我猜这个 API 才几天前 :)
  • 其实是angularjs $q promise 实现(docs.angularjs.org/api/ng.$q), then(successCallback, errorCallback) 通常我们使用jquery promise 语法不同的地方,比如saveChange() .then(function() { }) .fail(function() {})
  • 再次感谢您!我现在看到我可以解析来自“”中的 LightSwitch 的验证消息。我需要在这个周末完成我的文章,所以我会自己做。当你把它放到 JayData 中时,那就太好了。

标签: jaydata


【解决方案1】:

这行得通:

$scope.saveChanges = function () {
    $scope.ApplicationData.saveChanges()
    .then(function () {
        $scope.selectedToDo = null;
    }, function (error) {
        var xml = error.message,
        xmlDoc = $.parseXML(xml),
        $xml = $(xmlDoc),
        $ValidationResults = $xml.find("ValidationResults");

        angular.forEach($ValidationResults, function (ValidationResult) {
            angular.forEach(ValidationResult.childNodes, function (childNode) {
                alert(childNode.childNodes[0].textContent);
            });
        });

        $scope.ApplicationData.stateManager.reset();
    });
};

【讨论】:

  • OData 的 json 响应怎么样?
  • 你试过代码了吗?它没有工作吗?你得到了什么错误?
  • 我没有,因为它说 $.parseXml() 这意味着响应是 XML。我的是json。
  • 我没有例子,抱歉。
猜你喜欢
  • 2021-11-11
  • 1970-01-01
  • 1970-01-01
  • 2019-09-08
  • 2013-04-16
  • 1970-01-01
  • 1970-01-01
  • 2014-06-29
  • 2019-01-16
相关资源
最近更新 更多