JQuery& AJax:使用表单元素传递数据变量

时间:2012-03-30 18:34:01

标签: jquery ajax

我有一个基于“SecID”变量填充动态表单元素的表单,该变量标识用户所在站点的哪个部分。

我正在使用经典ASP,使用JQuery& AJAX保存表单更改。到目前为止,这段代码运行得很好:

<form name="sampleForm" ID="sampleForm">
            <input type="hidden" name="SecID" id="SecID" value=<%=SecID%>>

            <input type="text" value="<%=rs.fields("Title")%>" name="Title" class="formJD">

            <input type="text" value="<%=rs.fields("JobCode")%>" name="JobCode" class="formJD">
            <select name="<%=TypeID%>-<%=RowID%>" class="<%=FormClass%>">
                        <option value="">Select</option>
                        <option value="1">Example 1</option>
                        <option value="2">Example 2</option>
            </select>
<%'***more form elements taken out to be short****%>
</form>

<script>


function showValues() {
  var str = $("#sampleForm").serialize();
                $.ajax({
                     type: "POST",
                     url: "updateFormAJAX.asp",
                     data: str,
                     success: function(msg) {
                        // $('#autosavenotify').text(msg);
                     }
                });

}

$(":checkbox, :radio").click(showValues);
$("select").change(showValues);
$("input").change(showValues);
showValues();
</script>

我将省略AJAX调用的ASP页面。这一切都可以在每次更改时更新整个表单。我遇到的问题是,因为我使用serialize()将元素传递给AJAX,所以每次更改表单元素时都会保存ENTIRE表单。这对于较小的页面是可以的,但是某些页面的形式可能很大,并且将表单保存20次以上会减慢速度。

我想要做的只是在更改单个表单元素而不是整个表单时保存它们。我尝试用这样的函数来做到这一点:

<script>
    $(document).ready(function(){
    $('select').live('change',function () {
            var statusVal = $(this).val();
            //alert(statusVal);
            $.ajax({
                     type: "POST",
                     url: "saveStatus.asp",
                     data: "statusType=statusVal",
                     success: function(msg) {
                        // $('#autosavenotify').text(msg);
                     }
          })
      });
    });
    </script>

我也有这个工作,但我不确定如何将其他变量传递到我需要保存到数据库的AJAX更新页面。例如,在我上面发布的版本中,我能够传递“SecID”变量,因为我正在使用serialize(),它将发送所有内容。但是,如果我只想一次向单个表单元素发送更改,还包括“SecID”变量或其他变量,我将如何更改它以实现它?

感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

你可以尝试:

...
data: 'statusType=' + statusVal + '&otherKey=<%=otherVal%>',
...

答案 1 :(得分:0)

为什么复杂化?

如果您向表单添加保存按钮,则可以序列化并将其发布到服务器一次。

这不是在每次更改字段时将表单发布到服务器。