Ajax-запрос не достигает сервлета - PullRequest
0 голосов
/ 04 февраля 2012

Я пытаюсь вызвать ajax с использованием jquery и jsp, но не могу заставить его работать.

<%@page import="in.isuru.twitter.Twits" %>
<%@page import="java.util.ArrayList" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
    <head>
        <title>Twitter Sinhala</title>
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" type="text/javascript"></script>
        <script src="script.js" type="text/javascript"></script>
    </head>
    <body>
        <form id="form" action="twitterv2" method="post">
            Enter Something
            <input id="term" type="text" name="term" />
            <input id="submit" type="submit" value="Show results" name="submit"/>
        </form>
        <p id="result"></p>
    </body>
</html>

Это сервлет.

package in.isuru.twitter;

import java.io.IOException;
import java.util.ArrayList;

import javax.servlet.http.*;

import twitter4j.Query;
import twitter4j.QueryResult;
import twitter4j.Tweet;
import twitter4j.Twitter;
import twitter4j.TwitterException;
import twitter4j.TwitterFactory;

@SuppressWarnings("serial")
public class TwitterV2Servlet extends HttpServlet {

    public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
        resp.setContentType("text/html");
        //Twits tweets = new Twits();
        Twitter twitter = new TwitterFactory().getInstance();
        //twitter.setOAuthConsumer(CONSUMER_KEY, CONSUMER_SECRET);
        Query query = new Query("man");
        QueryResult result = null;
        try {
            result = twitter.search(query);
        } catch (TwitterException e) {
            e.printStackTrace();
        }
        for (Tweet tweet : result.getTweets()) {
            resp.getWriter().println(tweet.getFromUser() + ":" + tweet.getText() + "  <br/>");
        }
    }

}

Это script.js

$(document).ready(function() {
    $('#form').submit(function() {
        var number = $('#term').val();

        $.ajax({
            type:       "post",
            url:        "twitterv2",
            data:       "term=" + term,
            success:    function(msg) {
                $('#result').hide();
                $("#result").html("<h3>" + msg + "</h3>").fadeIn("slow");
            }
        });

        return false;
    });
});

Это web.xml

<?xml version="1.0" encoding="utf-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
    <servlet>
        <servlet-name>TwitterV2</servlet-name>
        <servlet-class>in.isuru.twitter.TwitterV2Servlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>TwitterV2</servlet-name>
        <url-pattern>/twitterv2</url-pattern>
    </servlet-mapping>
    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
    </welcome-file-list>
</web-app>

Я не могу заставить это работать. Когда я иду на страницу сервлета и приводить аргументы, как http://localhost:8888/twitterv2?term=people показывает сообщения в твиттере. Так что в сервлете нет ошибок, я думаю, что проблема в script.js. Но я не могу найти ошибку.

Ответы [ 2 ]

3 голосов
/ 04 февраля 2012

Вы отправляете запрос POST по ajax, однако ваш сервлет принимает только GET запросы.Используя приличный встроенный в браузер инструмент для веб-разработчиков, такой как Firebug или встроенный в Chrome (нажмите F12), вы должны были заметить, что запрос ajax вернул HTTP 405 Метод не разрешен Ответ, который сам по себе уже должен был зажечь лампочку в вашей голове.

Итак, чтобы решить вашу проблему, просто переименуйте метод doGet() в doPost() в сервлете или позвольте Ajax отправить GETзапрос вместо этого.

Ваш код скрипта и сервлета в целом выглядит нормально.Я не рекомендую переписать его, как предложено здесь другим ответчиком, вы полностью потеряете изящную деградацию (т. Е. Форма не будет отправлена ​​вообще, когда у конечного пользователя отключен JavaScript).

0 голосов
/ 04 февраля 2012
  1. Измените ваш тип ввода на кнопку.
  2. Создайте функцию и вызывайте ее по нажатию кнопки.
<input id="submit" type="button" value="Show results" onclick="submitForm()"   name="submit"/>

и затем создайте функцию ..

    <script>
    function submitForm(){
        $.ajax({
            type:       "post",
            url:        "twitterv2",
            data:       "term=" + term,
            success:    function(msg) {

                $('#result').hide();

                $("#result").html("<h3>" + msg + "</h3>")
                .fadeIn("slow");
            }
        });
    }
</script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...