Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用ajax将javascript数组发送到jsp_Javascript_Ajax_Jsp - Fatal编程技术网

使用ajax将javascript数组发送到jsp

使用ajax将javascript数组发送到jsp,javascript,ajax,jsp,Javascript,Ajax,Jsp,所以,我正在做一个选择题输入页面,我想完全用ajax来处理它。我想灵活处理问题的选项数量。 以下是jquery部分: $("#QuestionModPageSubmitButton").click(function(){ var QuesDesc=$("#QuesDesc").val(); var Options=[]; var QuestionId=$("#QuestionId").attr("data-id"); var Correct

所以,我正在做一个选择题输入页面,我想完全用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},

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

脚本:

var OptionsString="";
for(var i=0;i<TotalOptions;i++)
{
    Options.push($("#Option"+i).val());
    OptionsString+=(Options[i]+((i<TotalOptions-1)?" - ":" "));
}
它很好用。但我不想这样做,因为如果任何选项已经包含“-”,代码将崩溃


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

您可以通过ajax发送多个值。从控制器端(对于spring框架),您只需将其保存在字符串中。数据将用逗号分隔的值绑定。为此,您需要一个来自javascript端的数组,我指的是您的jsp端

对于复选框,您可以使用:

var idVal = [];
var i = 0;
$('.case:checked').each(function() {
   idVal[i] = $(this).val();
   i++;
});
从控制器端,您可以获得以下值:

String[] id = req.getParameter("id_").split(",");
同样,您也可以对下拉菜单(选项)执行此操作。
这在使用spring framework时适用。

谢谢。

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

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

        });
注意,我将选项写为“Options[]”。这使jsp理解所发送的变量是一个数组

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

String[] Options=request.getParameterValues("Options[]");
任何进一步的操作都可以作为普通字符串执行


所以,是的,这对我很有效

嘿。。谢谢你的答复。。但是,正如我在问题的最后一部分所写,我真的不想这样使用它。拆分字符串的问题是,如果发送的字符串或数组中已经包含逗号(,),那么它也会对该字符串进行拆分。因此,我认为如果要发送包含逗号本身的值,则可以向该值添加任何特殊字符。比如说,如果你找到逗号(,),你可以替换它(#)或其他东西。要从控制器端获取实际值,必须用逗号替换(#)。这可能是一种方式。
        $.ajax({
    type:"POST",
    url:"ajax/ModifyQuestion.jsp",
    data:{
            Subject:SubjectId,
            QID:QuestionId,
            Question:QuesDesc,
            Correct:CorrectOption,
            "Options[]":Options
         },

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