使用ajax将javascript变量传递给servlet

pass a javascript variable to a servlet using ajax

本文关键字:servlet 变量 ajax javascript 使用      更新时间:2023-09-26

我有一个frameId变量,我从我的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);

    } 

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

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

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


同样,在未来,"did not work"不是一个非常有用的描述发生了什么,这往往使我们不得不猜测什么可能是错的。您应该解释您在服务器上实际观察到的情况,以及您采取了哪些调试或诊断步骤。

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

我把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的内容不出现在输出中,即该段落不总是出现

有必要在servlet和url之间建立映射(对应),如下所示::

@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);
    }