Почему мой код не может передать параметры из JavaScript в JSP с помощью XMLHttpRequest? - PullRequest
4 голосов
/ 16 октября 2010

Я пытаюсь написать код JavaScript, который при событии щелчка мыши отправляет некоторый параметр (id) в код JSP на стороне сервера.Затем код JSP возвращает строку в JavaScript.

... и текст ответа будет строкой, возвращенной из JSP, указанного в out.println(substring);.

. Этот код не работает.Извините, если я делаю что-то глупое;Я новичок в кодировании для Интернета.

Ответы [ 3 ]

7 голосов
/ 16 октября 2010

XMLHttpRequest - это асинхронный запрос по умолчанию, означающий, что после вызова send, следующая строка кода выполняется до того, как запрос завершится . Код, который должен быть выполнен после завершения запроса, переходит в ваш обработчик «изменения состояния». Вы уже назначаете обработчик изменения состояния здесь:

xmlHttp.onreadystatechange = handleRequestStateChange

Но вы никогда не определяете, что на самом деле является handleRequestStateChange. Возможно, вам следует прочитать о состоянии готовности и событии onreadystatechange .

Попробуйте вместо этого следующий код:

<button type="button" onClick="handleButtonClick();">Click Me!</button>
<script type="text/javascript">
function handleButtonClick()
{
    // Declare the variables we'll be using
    var xmlHttp, handleRequestStateChange;

    // Define the function to be called when our AJAX request's state changes:
    handleRequestStateChange = function()
    {
        // Check to see if this state change was "request complete", and
        // there was no server error (404 Not Found, 500 Server Error, etc)
        if (xmlhttp.readyState==4 && xmlhttp.status==200) 
        {
            var substring=xmlHttp.responseText;
            // Do something with the text here
            alert(substring);
        }
    }

    xmlhttp = new XMLHttpRequest();
    xmlHttp.open("GET", "http://csce:8080/test/index.jsp?id=c6c684d9cc99476a7e7e853d77540ceb", true);
    xmlHttp.onreadystatechange = handleRequestStateChange;
    xmlHttp.send(null);
}
</script>

Этот код назначает handleRequestStateChange функцию, которая будет вызываться при изменении состояния готовности XMLHttpRequest. Функция проверяет, находится ли состояние готовности 4 (запрос завершен, а ответ готов) и, если это так, вы сможете получить доступ к свойству responseText запроса, который будет содержать ответ со страницы JSP.

В качестве предложения на будущее, когда вы узнали, как работает запрос AJAX, вы можете найти вспомогательную библиотеку, такую ​​как jQuery , которая значительно упрощает такие задачи!

2 голосов
/ 31 августа 2011

В вашем случае (метод GET) вам нужно передать переменные в метод open напрямую (в конце URL)

xhr.open("GET", "http://csce:8080/test/index.jsp?id=c6c684d9cc99476a7e7e853d77540ceb", true);
xhr.send(null);

Метод Goyuix только правильный в случае метода POST:

xhr.open("POST", "http://csce:8080/test/index.jsp", true);
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xhr.send("id=c6c684d9cc99476a7e7e853d77540ceb");

Возможно, вы захотите использовать глобальную функцию кодирования uri в качестве хорошей практики, если в вашем параметре есть пробелы или другие специальные символы:

Метод POST:

var myVar1 = encodeURIComponent("c6c684d9cc99476a7e7e853d77540ceb");
xhr.open("POST", "http://csce:8080/test/index.jsp", true);
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xhr.send("id=" + myVar1);

Метод GET:

var myVar1 = encodeURIComponent("c6c684d9cc99476a7e7e853d77540ceb");
xhr.open("GET", "http://csce:8080/test/index.jsp?id=" + myVar1, true);

К вашему сведению, вот как вы получаете параметры, переданные на страницу JSP :

Мы используем базовую библиотеку JSP (эта библиотека должна находиться в каталоге / WEB-INF / lib / вашего веб-приложения) для вывода значения параметра с именем "id".

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<c:out value="${param.id}"/>
1 голос
/ 16 октября 2010

Вместо передачи null в методе send попробуйте передать что-то вроде «ключ = значение», которое затем должно появиться в вашем объекте запроса JSP, и вы можете получить к нему доступ, вызвав что-то вроде:

string myValue = request.getParameter("key");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...