Ajax请求无法到达servlet

时间:2012-02-03 23:05:40

标签: jquery jsp java-ee servlets

我正在尝试使用jquery和jsp进行ajax调用,但我无法使其工作。

<%@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>

这是servlet。

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>

我不能让它发挥作用。当我进入servlet页面并提供类似的参数时 http://localhost:8888/twitterv2?term=people它显示了Twitter帖子。所以servlet中没有错误,我认为问题出在script.js中。但我找不到错误。

2 个答案:

答案 0 :(得分:3)

您正在通过ajax发送POST请求,但您的servlet仅接受GET个请求。使用合适的浏览器集成的Web开发人员工具(例如Firebug或Chrome中的内置工具(按F12)),您应该注意到ajax请求返回了HTTP 405 方法不允许响应它本身已经打开了你头上的灯泡。

因此,要解决您的问题,只需将doGet()方法重命名为servlet中的doPost(),或让Ajax发送GET请求。

您的脚本和servlet代码看起来一般都很好。我建议按照其他回答者的建议重写它,你将完全失去优雅的降级(即当最终用户禁用JavaScript时,表单将不会被提交)。

答案 1 :(得分:0)

  1. 将输入类型更改为按钮。
  2. 创建一个函数,然后单击该按钮调用它。
  3. <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>
    
相关问题