Нет ничего особенно плохого в коде в вашем вопросе (если вы на самом деле не хотели использовать AJAX, но я чувствую, что это другая проблема).
Ваш серверный код, кажется, реализует типичный Post / Redirect / Get шаблон обработки запросов.
Вот то, что, кажется, происходит
Browser | Server
----------------------|-----------------------------
create form |
action=urlVal |
method=POST |
|
submit form |
POST "urlVal" -------->
|
| Process request
|
<--- Response
| 302 Found
| Location: someUrl
|
GET "someUrl" ---------->
|
<--- Response
| 500 Internal Server Error
Таким образом, URL-адрес вашего серверного кода добавляется к ответу 302 Found
Заголовок Location
не может обработать запрос GET
, полученный в результате этого ответа.Вам нужно будет изменить свой серверный код, чтобы он обрабатывал запрос GET или отвечал другим Location
, который может.
Например (Spring MVC), скажем, ваш urlVal
- это"/foo"
и у вас есть
@RequestMapping("/foo")
public String handleFoo(@RequestParam String header) {
// process, etc
return "redirect:/foo";
}
Возвращая ответ redirect , подобный тому, который указывает клиенту (браузеру) выполнить GET
запрос через заголовки ответа ...
302 Found
Location: /foo
Обратите внимание, что для метода требуется параметр запроса header
.
Браузер попытается запросить /foo
через GET, что приведет к сбою, поскольку нет тела запроса с параметрами (т. Е. Нет header
).
Решение состоит в следующем:
- Перенаправление на существующий URL-адрес, который отвечает на
GET
запросов Обработка GET
запросов на URL-адрес, который вы перенаправляете на
@RequestMapping(path = "/foo", method = RequestMethod.GET)
public String getFoo() { // note, no required parameters
// etc
}
или
Отвечать по-другому.Даже пустой ответ хорошо
@RequestMapping("/foo")
@ResponseBody
public ResponseEntity<Void> handleFoo(@RequestParam String header) {
// process, etc
return ResponseEntity.ok().build();
}