дважды Форма подачи с использованием JQuery - PullRequest
0 голосов
/ 18 мая 2018

Я новичок в пользовательском интерфейсе, мы пытаемся реализовать веб-вызов с использованием JQuery, где у нас есть наблюдатель странная проблема веб-вызова, т. Е. Когда мы пытаемся сделать пост-HTTP-вызов, у нас есть наблюдатель в журналах доступа к серверу. выполняется первый HTTP-звонок, а затем сразу же один HTTP-вызов.

Пожалуйста, найдите ниже страницу .jsp:

<html>

<head>
<script type="text/javascript"
    src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"></script>
<%
    String urlVal = (String) request.getAttribute("dataURL");
%>
<%
    String emailID = (String) request.getAttribute("emailID") ;
%>

<script type="text/javascript">
var url="<%=urlVal%>";
alert(url);

     function navigateWithForm() {
        var form = $('<form></form>');
        form.attr({
            method: 'POST',

            action: url
        });
        form.append(getInput());
        form.appendTo('body').submit();

     }

     function getInput() {
         alert("<%=emailID%>");
        return $('<input type="hidden" />').attr({
            name: 'header',
            value: '<%=emailID%>'   
        });
    }

    $(document).ready(function() {
        navigateWithForm();
    });

</script>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>

</head>


</html>

В бэкэнде служба развернута в weblogic и спроектирована в рамках Spring 2.5. У нас есть прокси-сервер Apache для балансировки нагрузки.

Любая помощь будет оценена.

Ответы [ 2 ]

0 голосов
/ 24 мая 2018

Наконец, после многих дней борьбы, я нашел решение проблемы.что действительно небольшое изменение.Надеюсь, что решение будет полезно для кого-то еще, кто борется с проблемой.Фактическая проблема связана с URL / действием вызова Jquery.

URL-адрес, переданный ранее

Контекст: root? Param1 = value¶m2 = 2

Правильный URL-адрес, переданный

Контекст: root /? Param1 = value¶m2 = 2.

Спасибо Филу, где мне нужно увидеть заголовок запроса и ответа и другие, такие как местоположение, происхождение и реферер

0 голосов
/ 23 мая 2018

Нет ничего особенно плохого в коде в вашем вопросе (если вы на самом деле не хотели использовать 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();
    }
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...