使用ajax将javascript变量传递给servlet

时间:2014-03-11 22:30:13

标签: java javascript ajax servlets

我有一个frameId varibale,我从我的javascript代码恢复,我想传递给我的servlet,我使用ajax,但它不起作用:

这是我的javascript方法:

function createYTEvent(frameID,j) {
    return function (event) {
        var player = playerArray[frameID];
        var duration=player.getDuration();

if(!videoArray[j].valide){
         if (event.data == YT.PlayerState.PAUSED) {
        if(((player.getCurrentTime()*100)/duration)>2){
                    videoArray[j].valide=true;
                $.ajax({
                     type: 'GET',
                     url: 'localhost:8080/favoris',
                     data: frameID
                     });
                    }
                }
         if (event.data == YT.PlayerState.ENDED) {
        videoArray[j].valide=true;
                alert("frame id"+frameID + "valide= "+ videoArray[j].valide);
                }
        }
    }
}

这是我的servlet:favoris.java

@Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
       response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();

        String n1 = request.getParameter("frameID");
        out.println(n1);


    } 
你可以帮助我......

3 个答案:

答案 0 :(得分:1)

根据您在服务器上处理get请求的方式,听起来您希望ajax调用中的命名参数名为" frameID"。如果是这种情况,那么ajax调用中的data行需要更改为:

$.ajax({
     type: 'GET',
     url: 'localhost:8080/favoris',
     data: {"frameID": frameID}
});

这会将其作为localhost:8080/favoris?frameID=xxx放入网址,然后您的服务器端代码request.getParameter("frameID");可以从网址参数中获取它。


此外,将来"did not work"对于发生的事情并不是一个非常有用的描述,这往往会让我们猜到可能出错的地方。您应该解释您在服务器上实际观察到的内容以及您采取的调试或诊断步骤。

答案 1 :(得分:0)

感谢大家回复Abors我,我会考虑你的意见。

我把我的servlet放在一个包(package1)中。

// when the player changes states
function createYTEvent(frameID,j) {
    return function (event) {
        var player = playerArray[frameID];
        var duration=player.getDuration();

if(!videoArray[j].valide){
         if (event.data == YT.PlayerState.PAUSED) {
        if(((player.getCurrentTime()*100)/duration)>2){
                    videoArray[j].valide=true;
                $.ajax({
                     type: 'GET',
                     url: 'localhost:8080/package1/favoris',
                     data: {"frameID": frameID}
                });
                    }
                }
         if (event.data == YT.PlayerState.ENDED) {
        videoArray[j].valide=true;
                alert("frame id"+frameID + "valide= "+ videoArray[j].valide);
                }
        }
    }
}

在我的servlet的doGet方法的代码下面。

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
   response.setContentType("text/html;charset=UTF-8");
    PrintWriter out = response.getWriter();

    String n1 = request.getParameter("frameID");
    out.println(n1);
} 

变量frameId的内容不会出现在输出中,即通道并不总是出现。

答案 2 :(得分:0)

Je partage avec vous la solution。 il faut faire du mapping(对应)entre la servlet et l' url comme ceci:

@WebServlet(name = "favoris1")
public class favoris extends HttpServlet

例如,如果名为" MyProject",url的项目必须是:

var url="/MonProjet/favoris1"

突然ajax代码变成:

$.ajax({
                 type: 'GET',
                 url: '/exempleYoutube/favoris1?frameID='+frameID,
                 success: function(resp){
                    alert(resp);
                }
                 });

和servlet:

@WebServlet(name = "favoris1")
public class favoris1 extends HttpServlet {
.
.
.
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");

        PrintWriter out = response.getWriter();

        String n1 = request.getParameter("frameID");
        out.println("frameID= "+n1);
    }