使用 JavaScript 填充 AJAX 中的数据字符串无效

Using JavaScript to populate data string in AJAX not working

我有第 1 页,它将请求字符串 txtRow 的行数并显示 select 框的行数。我的 select 框将具有 ID selID0、selID1、selID2...等等,具体取决于行数。然后,用户将选择 select 框中的选项。然后我想检查哪个 select 框 (selID) 不是由用户使用 AJAX 编辑的 select。我正在使用 javascript 来填充 Ajax 中的数据字符串。

var kae = "";
 for (i = 0; i< <%=sROW %>; i++){
    var str = '"selID' + i + '":$("#selID' + i + '").val(),';
    kae = kae + str
 }`
 $.ajax({
         url    : url_to,
         type   : 'POST',
         data   :  { "txtRow":$("#txtRow").val(), kae 
         },

然后我会 post 到 asp 第 2 页做一些检查。如果我的 select 框中的值为空,我将 return 一个字符串

response.write "{ ""data"": { ""status"": ""errorInfo"" } }"

如果所有 select 框,selID0、selID1、selID2...等等,取决于 selected 的行数都是 selected。我会return一个字符串

response.write "{ ""data"": { ""status"": ""ok "" } }"

返回第 1 页 Ajax,我将检查状态并相应地显示警报。

现在将 selID0、selID1 值传递给 page2 时出现问题。如果我使用 for 循环填充数据,第 2 页确实无法从第 1 页获取值。但是如果我像下面这样硬编码字符串。我可以设法获取第 2 页上的值。我检查了 kae 变量并且生成的字符串没问题,但我不确定为什么我无法将值传递到第 2 页?请帮助,非常感谢。

"selID0":$("#selID0").val(),
"selID1":$("#selID1").val(),

第 1 页的完整代码

<%
sRow = Cint(request("txtRow"))
%>

<form name="form2" action="ax_test.asp" method="post">
<input type="hidden" id="txtRow" name="txtRow" value="<%=sRow%>" />
<table>
<%  i=0
do while i < Cint(sROW)

    response.write "<tr>"
    response.write "<td>"
    response.write "    <select class='form-control' id='selID" & i & "' name='selID" & i & "'>"
    response.write "        <option value=''>Select</option>"
    response.write "        <option value='a'>a</option>"
    response.write "        <option value='b'>b</option>"
    response.write "        <option value='c'>c</option>"
    response.write "        <option value='d'>d</option>"
    response.write "    </select>"
    response.write "</td>"
    response.write "</tr>"
    i=i+1
loop

%>
</table>


<button type="button" id="btnSave" name="btnSave" value="save" class="btn btn-default"
    style="width: 90px" onclick="checkselect();">Save</button>
</form>

<script>
function checkselect() {

var url_to  = 'ax_postcheckselect.asp';
var kae = "";

for (i = 0; i< <%=sROW %>; i++){
    var str = '"selID' + i + '":$("#selID' + i + '").val(),';
    kae = kae + str
}

     $.ajax({
         url    : url_to,
         type   : 'POST',
         data   :  { "txtRow":$("#txtRow").val(), kae 
         },
         success    : function(res){

                if(res.data.status == "errorInfo"){
                     return alert('You miss selecting something ');
                }else if(res.data.status == "ok") {
                     alert("Successfull.");
                    location.reload();
                }
         },
         error  : function(error){
             console.log(error);
         }
     });
}

第 2 页的完整代码

<%
Response.ContentType = "application/json"   
Server.ScriptTimeout = 1000000


sRow = request("txtRow")

response.write "{ ""data"": { ""status"": """ & request("selID0") & """ } }"
response.end

bSelect = "Y"
i = 0
do while i < Cint(sRow)
   sID = request("selID" & i )
       if sID = "" then 
            bSelect = "N"
            exit Do     
       end if       
    i = i + 1
loop

if bSelect = "N" then
    response.write "{ ""data"": { ""status"": ""errorInfo"" } }"
    response.end
else
    response.write "{ ""data"": { ""status"": ""ok"" } }"
    response.end 
end if

%>

您必须发送它的值,而不是发送字符串 $("#selID0").val()

即变化:

var str = '"selID' + i + '":$("#selID' + i + '").val(),';

至:

var str = '"selID' + i + '":"' + $("#selID" + i).val() + '",';

检查网络选项卡,查看哪些值被发送到 page2。您应该会看到一个名为 kae 的字段,其中包含所有这些 selxx 值。您必须更改 page2 才能访问这些值。

如果你还没有,你应该通过 the documentation on $.ajax