使用ajax

时间:2016-04-10 06:27:55

标签: javascript ajax jsp

所以,我正在处理MULTIPLE CHOICE QUESTION条目页面,我想用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页面&#34; ModifyQueston.jsp&#34;。

这是我用来读取发送数据的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页面 我尝试通过将每个值与&#39; - &#39;分隔开来将数组转换为单个字符串。然后使用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("-");

工作正常。但我不想这样做,因为如果任何选项已包含&#39; - &#39;守则会崩溃。

那么,如何完成这项工作?

2 个答案:

答案 0 :(得分:0)

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

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

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

从控制器端,您可以获得值:

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

同样的方法可以用来下拉(选项)。
这在使用弹簧框架时适用于我。
感谢。

答案 1 :(得分:0)

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

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

        });

请注意,我将选项编写为“选项[]”。这使得jsp理解发送的变量是一个数组。

现在,jsp页面并不需要太多修改。

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

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

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