2012-02-03 2 views
0

Я пытаюсь выполнить вызов ajax с помощью 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> 

Это сервлет.

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. Но я не могу найти ошибку.

+0

Вы использовали [firebug] (http://getfirebug.com) или инструменты разработчика хром для проверки ответа и просмотра ошибки? – ggreiner

+0

никогда не использовал такой инструмент. Я чувствую себя более слабым, разве эти проблемы не простые? – Isuru

ответ

0
  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> 
3

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

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

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

Смежные вопросы