【问题标题】:pass a javascript variable to a servlet using ajax使用 ajax 将 javascript 变量传递给 servlet
【发布时间】:2014-04-15 19:02:09
【问题描述】:

我有一个从我的 javascript 代码中恢复的 frameId 变量,我想传递给我的 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:喜爱的.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);


    } 

你能帮帮我吗...

【问题讨论】:

    标签: java javascript ajax servlets


    【解决方案1】:

    根据您在服务器上处理 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" 对所发生的事情的描述并不是很有用,这往往会让我们不得不猜测可能出了什么问题。您应该解释您在服务器上实际观察到的情况以及您采取了哪些调试或诊断步骤。

    【讨论】:

      【解决方案2】:

      感谢大家对我的回应,我会考虑你们的 cmets。

      我将我的 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的内容没有出现在输出中,即段落并不总是出现。

      【讨论】:

        【解决方案3】:

        必须像这样在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);
            }
        

        【讨论】:

          猜你喜欢
          • 2012-10-24
          • 2011-09-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-08-28
          相关资源
          最近更新 更多