2013-04-04 2 views
8

В AngularJS, я имел следующую функцию, которая работала отлично:NetworkError: 405 Method Not Allowed AngularJS REST

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

Теперь я хотел бы изменить это из файла в URL (который возвращает JSON с помощью некоторых сладкий Laravel 4):

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

ошибки я получаю:

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

В чем проблема? Это потому, что fruit.json был «местным», а localhost - нет?

ответ

5

От 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. 

Это означает, что для URL: http://localhost/fruitapp/fruits сервер отвечает, что метод GET не допускается. Это POST или PUT?

+0

Ну, если я использую Postman для GET 'http: // localhost/fruitapp/fruits', статус 200 ok, application-type application/json, плюс я получаю вывод фактических данных json. Значит, это значит ...? – Ben

+1

О, это то, что говорит Chrome \ Network \ Headers: «URL-адрес запроса: http: // localhost/fruitapp/fruits. Метод запроса: ВАРИАНТЫ Код состояния: 405 Метод не разрешен». Это означает, что AngularJS фактически не отправляет ПОЛУЧИТЬ, но ВАРИАНТЫ? – Ben

+5

А, вы используете свое угловое приложение на локальном хосте? Это звучит как проблема с [Access Control (CORS)] (https://developer.mozilla.org/en-US/docs/HTTP/Access_control_CORS) – Xesued

1

Угловая версия js, которую вы используете, будет < = 1.2.9.

Если да, попробуйте это.

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

У меня была аналогичная проблема с моим SpringBoot проекта, я получаю ту же ошибку в консоли браузера, но я видел другое сообщение об ошибке, когда я смотрел на серверную бревно, он бросает эту ошибку: «org.springframework.web.HttpRequestMethodNotSupportedException, сообщение = метод запроса„DELETE“не поддерживается» оказалось, что я пропускал {ID} параметр в серверной контроллера:

** 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

Для меня сервер не настроен для CORS. Вот как я это сделал на Azure: CORS enabling on Azure Надеюсь, что-то подобное работает и с вашим сервером. Я также нашел предложение, как настроить CORS на web.config, но без гарантии: configure CORS in the web.config. В общем, на ваш сервер есть предпродажный запрос, и если вы выполнили запрос с кросс-началом (то есть с другого URL-адреса, чем у вашего сервера), вам необходимо разрешить все происхождение на вашем сервере (Access-Control-Allow-Origin *).

+3

Если вы столкнулись с той же проблемой и нашли решение, не могли бы вы рассказать о своем решении и дать полный ответ? – David

+0

Тогда как вы настроили сервер, чтобы он работал с CORS? – RBT

+0

Извините, я думал, что это помогает в качестве поискового запроса. Но теперь я выполнил свой ответ. Я просто могу дать вам ссылку, как это сделать на Azure. Надеюсь, вы можете использовать его аналогичным образом для своего сервера. См. Выше. – Nadine

Смежные вопросы