2013-04-04 32 views
8

Trong AngularJS, tôi đã có chức năng sau đây, mà làm việc tốt:NetworkError: 405 Phương pháp không được phép AngularJS REST của

$http.get("fruits.json").success($scope.handleLoaded); 

Bây giờ tôi muốn thay đổi điều này từ một tập tin vào một url (trả về json sử dụng một số Laravel ngọt 4):

$http.get("http://localhost/fruitapp/fruits").success($scope.handleLoaded);

Các lỗi tôi nhận được là:

"NetworkError: 405 Method Not Allowed - http://localhost/fruitapp/fruits" 

Có vấn đề gì? Có phải vì fruit.json là "local" và localhost không?

Trả lời

5

Từ w3:

10.4.6 405 Method Not Allowed 

The method specified in the Request-Line is not allowed for the resource 
identified by the Request-URI. The response MUST include an Allow header 
containing a list of valid methods for the requested resource. 

Nó có nghĩa là cho URL: http://localhost/fruitapp/fruits Các máy chủ đang phản ứng rằng phương pháp GET không được phép. Có phải là POST hoặc PUT không?

+0

Vâng, nếu tôi sử dụng Postman để GET 'http: // localhost/fruitapp/fruits', trạng thái là 200 ok, ứng dụng kiểu nội dung/json, cộng với tôi nhận được đầu ra của dữ liệu json thực tế. Vậy điều đó có nghĩa là...? – Ben

+1

Ồ, đây là những gì Chrome \ Network \ Headers nói: 'Yêu cầu URL: http: // localhost/fruitapp/fruits Phương thức yêu cầu: OPTIONS Mã trạng thái: 405 Phương thức không được phép' Điều đó có nghĩa là AngularJS thực sự không gửi GET, nhưng một OPTIONS? – Ben

+5

Ah, bạn có đang chạy ứng dụng Angular trên localhost không? Điều này nghe có vẻ giống như một vấn đề với [Access Control (CORS)] (https://developer.mozilla.org/en-US/docs/HTTP/Access_control_CORS) – Xesued

1

Phiên bản js góc bạn đang sử dụng sẽ là < = 1.2.9.

Nếu có, hãy thử điều này.

return $http({     
    url: 'http://localhost/fruitapp/fruits', 
    method: "GET", 
    headers: { 
     'Content-Type': 'application/json', 
     'Accept': 'application/json' 
    } 
}); 
0

Tôi đã có một vấn đề tương tự với dự án SpringBoot của tôi, tôi đã nhận được các lỗi tương tự trong trình duyệt giao diện điều khiển nhưng tôi thấy một thông báo lỗi khác nhau khi tôi nhìn vào các bản ghi back-end, Nó được ném lỗi này: "org.springframework.web.HttpRequestMethodNotSupportedException, message = Yêu cầu phương pháp 'DELETE' không được hỗ trợ" hóa ra là tôi đã thiếu {id} tham số trong bộ điều khiển back-end:

** Wrong code :** 
 
@RequestMapping(value="books",method=RequestMethod.DELETE) 
 
\t public Book delete(@PathVariable long id){ 
 
\t Book deletedBook = bookRepository.findOne(id); 
 
\t bookRepository.delete(id); 
 
\t return deletedBook; 
 
} 
 

 
** Correct code :** 
 

 
@RequestMapping(value="books/{id}",method=RequestMethod.DELETE) 
 
\t public Book delete(@PathVariable long id){ 
 
\t \t Book deletedBook = bookRepository.findOne(id); 
 
\t \t bookRepository.delete(id); 
 
\t \t return deletedBook; 
 
}

0

Đối với tôi, đó là máy chủ không được cấu hình cho CORS. Đây là cách tôi đã thực hiện trên Azure: CORS enabling on Azure Tôi hy vọng điều gì đó tương tự cũng hoạt động với máy chủ của bạn. Tôi cũng tìm thấy đề xuất cách định cấu hình CORS trên web.config, nhưng không đảm bảo: configure CORS in the web.config. Nói chung, có một yêu cầu preflight cho máy chủ của bạn, và nếu bạn đã thực hiện một yêu cầu cross-origin (đó là từ một url khác với máy chủ của bạn), bạn cần cho phép tất cả các nguồn gốc trên máy chủ của bạn (Access-Control-Allow-Origin) *).

+3

Nếu bạn gặp phải vấn đề tương tự và tìm ra giải pháp, bạn có thể giải thích giải pháp của mình và cung cấp câu trả lời hoàn chỉnh không? – David

+0

Sau đó, làm thế nào bạn cấu hình máy chủ để làm cho nó hoạt động với CORS? – RBT

+0

Xin lỗi, tôi nghĩ rằng nó giúp ích như một thuật ngữ tìm kiếm. Nhưng tôi đã hoàn thành câu trả lời của tôi ngay bây giờ. Tôi chỉ có thể cung cấp cho bạn liên kết cách thực hiện trên Azure. Tôi hy vọng, bạn có thể sử dụng nó theo cách tương tự cho máy chủ của bạn. Xem ở trên. – Nadine

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