我正在尝试使用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中。但我找不到错误。
答案 0 :(得分:3)
您正在通过ajax发送POST
请求,但您的servlet仅接受GET
个请求。使用合适的浏览器集成的Web开发人员工具(例如Firebug或Chrome中的内置工具(按F12)),您应该注意到ajax请求返回了HTTP 405 方法不允许响应它本身已经打开了你头上的灯泡。
因此,要解决您的问题,只需将doGet()
方法重命名为servlet中的doPost()
,或让Ajax发送GET
请求。
您的脚本和servlet代码看起来一般都很好。我不建议按照其他回答者的建议重写它,你将完全失去优雅的降级(即当最终用户禁用JavaScript时,表单将不会被提交)。
答案 1 :(得分:0)
<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>