【问题标题】:Using JavaScript to populate data string in AJAX not working使用 JavaScript 在 AJAX 中填充数据字符串不起作用
【发布时间】:2017-08-22 18:20:59
【问题描述】:

我有第 1 页,它将从字符串 txtRow 请求行数并显示选择框的行数。我的选择框将具有 ID selID0、selID1、selID2... 等等,具体取决于行数。然后,用户将在选择框中选择选项。然后,我想检查使用 AJAX 的用户没有选择哪个选择框(selID)。我正在使用 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 
         },

然后我将发布到一个 ASP Page 2 做一些检查。如果我的选择框中的值为空,我将返回一个字符串

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

如果所有的选择框,selID0,selID1,selID2...等等取决于选择了多少行都被选中。我会返回一个字符串

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

%>

【问题讨论】:

  • 您是在工作站版本的 IIS 上开发吗?因为默认情况下它只允许一个请求,并且您的 AJAX 请求可能会挂起。您可以尝试在此站点的应用程序池的高级设置中增加最大工作进程数。
  • 嗨,Rico,感谢您的回复,我已将工作进程的最大数量切换为 10,但仍然无法正常工作。
  • 对不起@Hansheung Cheah,根据您的描述,我不确定这些页面应该做什么。但是,如果主要问题是(如您所说)页面中的硬编码对象有效,但在 JavaScript 中的 FOR 循环中构建它们不起作用,则可能您的 kae 变量包含一个字符串,而不是 JavaScript 对象。我会使用浏览器调试器来检查你的 kae 变量的内容和你的硬编码数据,看看有什么不同。

标签: javascript jquery ajax asp-classic


【解决方案1】:

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

即改变:

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

到:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-08
    • 2022-01-22
    • 1970-01-01
    • 2016-09-22
    • 2011-08-10
    • 2019-09-17
    • 1970-01-01
    • 2019-11-22
    相关资源
    最近更新 更多