2012-10-26 28 views
9

Vì vậy, tôi đang sử dụng dịch vụ an toàn angularjs $ resource và tôi đang gọi hàm $ save. Tuy nhiên, lỗi gọi lại mà tôi chuyển đến nó không được gọi. Máy chủ đang gửi một lỗi 418 mà tôi nghĩ vì nó không phải 200 sẽ dẫn đến lỗi gọi lại được gọi. Nhưng, nó không bao giờ. Tôi không thể tìm thấy bất kỳ tài liệu nào nêu rõ mã lỗi http nào sẽ dẫn đến lỗi gọi lại được gọi.Dịch vụ AngularJS không gọi lại gọi lại lỗi trên phương thức save()

Đây là mã của tôi:

var modalScope = $scope.$new(); 
modalScope.showPassword = false; 
modalScope.message = null; 
modalScope.user = new User(); 

modalScope.submit = function(user) { 
    user.$save({}, function(data,headers) { 
     // do the success case 
    }, function(data,headers) { 
     // do the error case     
    }); 
}; 

Các modalScope.user đang được truyền cho nộp chức năng xác định. Vì vậy, vấn đề tại sao gọi lại lỗi này không được gọi là gì?

+0

Vì vậy, gọi lại 'thành công' luôn được gọi? – Tosh

+0

Có gọi lại thành công luôn được gọi. – chubbsondubs

+4

Tôi nghĩ rằng tôi đã tìm thấy sự cố, máy chủ web của bạn là một ấm trà. –

Trả lời

8

tôi tìm thấy những điều sau trong mã nguồn ngResource

$http({method: 'GET', url: '/someUrl'}). 
    success(function(data, status, headers, config) { 
     // this callback will be called asynchronously 
     // when the response is available 
    }). 
    error(function(data, status, headers, config) { 
     // called asynchronously if an error occurs 
     // or server returns response with status 
     // code outside of the <200, 400) range 
    }); 

tôi loại nhầm lẫn về các ký hiệu dãy nhưng có vẻ như nó thực sự nên gọi phương thức lỗi. Có thể bạn đã tìm thấy một lỗi.

+2

Tài liệu Angularjs hoàn toàn vô cùng. Họ thực sự khủng khiếp. Tôi không thể nói đủ khủng khiếp khủng khiếp đến mức họ đang giải thích bản thân. Điều đó đang được nói rằng tôi nghĩ rằng bất cứ điều gì giữa 100-200, 400-499 KHÔNG được coi là lỗi. WTF ?! Đúng?! Làm thế nào địa ngục mà làm cho bất kỳ ý nghĩa. 404 sẽ là lỗi! Bạn đã tìm thấy trang nào trong tài liệu? Tôi sẽ đăng một bình luận yêu cầu họ làm rõ và có khả năng thay đổi chính sách vô vị của họ. – chubbsondubs

+0

Crap Tôi đọc lại bình luận của bạn. Đó là trong mã nguồn. Yay cho tài liệu. Dù sao cảm ơn bạn đã tìm thấy điều đó! – chubbsondubs

+0

@chubbsondubs Tôi không tìm thấy nó trong tài liệu nhưng trong mã nguồn góc. Tìm kiếm "400)" ở đây để tìm đoạn: https://ajax.googleapis.com/ajax/libs/angularjs/1.0.2/angular.js –

4

tôi đã gặp rắc rối với các callback lỗi là tốt, nhưng có vẻ như trong nhiều phiên bản gần đây của AngularJS, phương pháp lỗi callback bây giờ phải được thực hiện một cái gì đó như thế này:

SomeResource.query({}, angular.noop, function(response){ 
    $scope.status = response.status; 
}); 

Nguồn + Mô tả chi tiết hơn: https://groups.google.com/d/msg/angular/3Q-Ip95GViI/at8cF5LsMHwJ

Ngoài ra, để trả lời nhận xét trên bài đăng của Flek, có vẻ như bây giờ chỉ phản hồi từ 200 đến 300 không được coi là lỗi.

0

tôi sao chép từ ngResource documentation:

Các phương pháp hành động trên đối tượng lớp hoặc đối tượng dụ có thể được gọi với các thông số sau:

  • HTTP GET "lớp" Hành động: Resource.action ([tham số], [thành công], [lỗi])
  • hành động "class" không được thực hiện: Resource.action ([tham số], postData, [success], [error])
  • no n-GET hành động cá thể: ví dụ. $ action ([tham số], [thành công], [lỗi])

Gọi lại thành công được gọi với đối số (value, responseHeaders). Lỗi gọi lại được gọi với đối số (httpResponse).

$save được coi là hành động "lớp" không GET, vì vậy bạn phải sử dụng thông số bổ sung postData. Sử dụng cùng một ví dụ câu hỏi, điều này sẽ làm việc:

modalScope.submit = function(user) { 
    user.$save({}, {}, function(data,headers) { 
     // do the success case 
    }, function(response) { 
     // do the error case     
    }); 
}; 

Giữ một mắt trên các callback lỗi, so với ví dụ này, đang kêu gọi chỉ với một đối số, mang lại tất cả các phản ứng http.

+2

Không phải là $ save() một hành động dụ làm lỗi gọi lại tham số thứ ba? – PilotBob

2

tôi không thể có được câu trả lời Alter để làm việc, nhưng điều này đã làm việc cho tôi:

user.$save(function (user, headers) { 
        // Success 
        console.log("$save success " + JSON.stringify(user)); 
       }, function (error) { 
        // failure 
        console.log("$save failed " + JSON.stringify(error)) 
       }); 
5

Đã cùng một vấn đề và không có gì ở đây làm việc. Hóa ra tôi đã có một trình chặn đánh chặn lỗi tùy chỉnh không trả lại một cách rõ ràng $ q.reject (phản hồi).

Dường như mọi trình chặn đánh chặn lỗi tùy chỉnh hoàn toàn sẽ ghi đè hành vi mặc định.

Xem https://github.com/angular/angular.js/issues/2609#issuecomment-44452795 cho nơi tôi tìm thấy câu trả lời.

+0

Bạn tiết kiệm trong ngày của tôi! –

+0

Chạy vào cùng một vấn đề. Cám ơn vì cái này! – weltschmerz

+0

Điều này đã cứu tôi rất nhiều thời gian. Vấn đề là ở một trong những kẻ đánh chặn của chúng tôi. Cảm ơn bạn – dimiguel

-1

Thực ra, nếu chúng tôi làm theo tài liệu. nó hoạt động

User.save(vm.user, function (response) { 
       FlashService.Success('Registration successful', true); 
       $location.path('/login'); 
     }, 
     function (response) { 

      FlashService.Error(response.data); 
      vm.dataLoading = false; 

     }); 

ở trên là snip từ mã của tôi nó hoạt động.

Các vấn đề liên quan