【问题标题】:sending javascript array to jsp using ajax使用ajax将javascript数组发送到jsp
【发布时间】:2026-01-23 11:30:01
【问题描述】:

所以,我正在处理一个多项选择问题条目页面,我想用 ajax 完全处理它。我想灵活处理问题的选项数量。
这是 jquery 部分:

$("#QuestionModPageSubmitButton").click(function(){
       var QuesDesc=$("#QuesDesc").val();
       var Options=[];
       var QuestionId=$("#QuestionId").attr("data-id");
       var CorrectOption=$('input[type="radio"]:checked').val();
       var TotalOptions=$("#TotalOptions").attr("data-total");
       var SubjectId=$("#SubjectId").attr("data-id");

       for(var i=0;i<TotalOptions;i++)
        {
            Options.push($("#Option"+i).val());
        }


        $.ajax({
        type:"POST",
        url:"ajax/ModifyQuestion.jsp",
        data:{
                Subject:SubjectId,
                QID:QuestionId,
                Question:QuesDesc,
                OptionValues:Options,
                Correct:CorrectOption,
                TotalOptions:TotalOptions},

            });
});

我想将 Options Array 发送到 jsp 页面“ModifyQueston.jsp”。

这是我用来读取发送数据的jsp代码:

int SubjectId=Integer.parseInt(request.getParameter("Subject"));
int QuestionId=Integer.parseInt(request.getParameter("QID"));
String Question=request.getParameter("Question");
String[] Options=request.getParameterValues("OptionValues");
int CorrectOption=Integer.parseInt(request.getParameter("Correct"));
int TotalOptions=Integer.parseInt(request.getParameter("TotalOptions"));

但是使用这些代码我无法读取 jsp 页面中的数组。当我尝试读取 Options 数组的长度或尝试通过提供索引来读取值时,我得到 NullPointerException。
我想将数据发送到jsp的脚本部分很好。所以问题是如何将它放入jsp页面。
我尝试将数组转换为单个字符串,方法是用“-”分隔每个值,然后使用 getParameter() 函数读取它,然后使用 split() 函数将其分离回 Array。

脚本:

var OptionsString="";
for(var i=0;i<TotalOptions;i++)
{
    Options.push($("#Option"+i).val());
    OptionsString+=(Options[i]+((i<TotalOptions-1)?" - ":" "));
}

JSP:

String[] Options=(request.getParameter("OptionValues")).split("-");

它工作正常。但我不想这样做,因为如果任何选项已经包含“-”,代码就会崩溃。

那么,如何做到这一点呢?

【问题讨论】:

    标签: javascript ajax jsp


    【解决方案1】:

    好的,经过几周的研究,我找到了一种将数组从 js 发送到 jsp 的方法。之前的代码只需要稍作修改。 这是需要修改的js部分。我只需要像数组一样在数据部分添加括号。

            $.ajax({
        type:"POST",
        url:"ajax/ModifyQuestion.jsp",
        data:{
                Subject:SubjectId,
                QID:QuestionId,
                Question:QuesDesc,
                Correct:CorrectOption,
                "Options[]":Options
             },
    
            });
    

    请注意,我将 Options 写为“Options[]”。这让jsp明白被发送的变量是一个数组。

    现在,jsp 页面实际上不需要太多修改。

    String[] Options=request.getParameterValues("Options[]");
    

    任何进一步的操作都可以作为普通字符串执行。

    所以,是的,这对我有用!..

    【讨论】:

      【解决方案2】:

      您可以通过 ajax 发送多个值。从控制器端(对于弹簧框架),您只需将其保存在一个字符串中。数据将与逗号分隔值绑定。要做到这一点,你需要一个来自 javascript 端的数组,我的意思是你的 jsp 端。

      您可以使用的复选框:

      var idVal = [];
      var i = 0;
      $('.case:checked').each(function() {
         idVal[i] = $(this).val();
         i++;
      });
      

      从控制器端你可以得到值:

      String[] id = req.getParameter("id_").split(",");
      

      与您可以对下拉菜单(选项)执行此操作的方式相同。
      这在使用 spring 框架时对我有用。
      谢谢。

      【讨论】:

      • 嘿.. 感谢您的回复.. 但是,正如我在问题的最后一部分中所写,我真的不想以这种方式使用它。拆分字符串的问题是,如果发送的字符串或数组中已经包含逗号(,),那么它也会将字符串拆分。
      • 所以我认为如果你想发送一些本身包含逗号的值,那么你可以向该值添加任何特殊字符。例如,如果您找到逗号(,),您可以替换它(#)或其他东西。为了从控制器端获得真正的价值,您必须将 (#) 替换为逗号。这可能是一种方式。