Ajax 请求未到达 servlet
我正在尝试使用 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您正在通过 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 acceptingGET
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 todoPost()
in servlet, or let Ajax send aGET
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).
然后创建一个函数..
and then create a function..