Ajax 请求未到达 servlet

发布于 2025-01-02 22:17:27 字数 3611 浏览 0 评论 0原文

我正在尝试使用 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中。但我找不到错误。

I am trying to ajax call using jquery and jsp but I can't make it work.

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

This is the 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/>");
        }
    }

}

This is 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;
    });
});

This is 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>

I cannot make it work. When I go to the servlet page and give argument like
http://localhost:8888/twitterv2?term=people it shows twitter posts. So there is no errors in the servlet, I think the problem is in script.js. But I can't find an error.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

巴黎盛开的樱花 2025-01-09 22:17:27

您正在通过 ajax 发送 POST 请求,但是您的 servlet 仅接受 GET 请求。使用一款不错的浏览器集成 Web 开发工具,例如 Firebug 或 Chrome 中的内置工具(按 F12),您应该已经注意到ajax 请求返回了一个 HTTP 405 Method Not allowed 响应,该响应本身应该已经让您头脑清醒。

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

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

You're sending a POST request by ajax, however your servlet is only accepting GET requests. Using a decent browser-integrated web developer tool such as Firebug or the builtin one in Chrome (press F12), you should have noticed that the ajax request returned a HTTP 405 Method Not Allowed response which should by itself already have turned on a bulb in your head.

So, to solve your problem, just either rename doGet() method to doPost() in servlet, or let Ajax send a GET request instead.

Your script and servlet code looks in general fine. I do not recommend to rewrite it as suggested by the other answerer here, you'll totally lose graceful degradation (i.e. the form won't be submitted at all when the enduser has JavaScript disabled).

执着的年纪 2025-01-09 22:17:27
  1. 将输入类型更改为按钮。
  2. 创建一个函数并在单击按钮时调用它。

然后创建一个函数..

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

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

                $("#result").html("<h3>" + msg + "</h3>")
                .fadeIn("slow");
            }
        });
    }
</script>
  1. Change your input type to button.
  2. Create a function and call it onclick of the button.
<input id="submit" type="button" value="Show results" onclick="submitForm()"   name="submit"/>

and then create a function..

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

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

                $("#result").html("<h3>" + msg + "</h3>")
                .fadeIn("slow");
            }
        });
    }
</script>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文