如何在Ajax中验证序列化数据

how to validate serialized data in Ajax

本文关键字:验证 序列化 数据 Ajax      更新时间:2023-09-26

我遇到了这个特殊的问题,在通过ajax调用保存数据之前,我需要验证数据。当用户导航到不同的URL时,会调用save_ass_rub函数。

在我的应用程序中,我有一个自定义窗口,允许用户输入数据。我能够在这个步骤中捕获所有数据:var data = $('form').serialize(true);。但我需要循环执行此操作,并检查某些特定元素的数据是否为空。当用户在自定义窗口中时,我无法执行此操作。自定义窗口对用户来说是可选的。我只想提醒用户,以防他在提交数据之前将元素留空。我们使用的是Prototype.js和ajax。

<script>
  function save_ass_rub() {
    var url = 'xxxx';
    var data = $('form').serialize(true);
    var result;
    new Ajax.Request( url, {
      method: 'post',
      parameters: data,
      asynchronous: false,  // suspends JS until request done
      onSuccess: function (response) {
        var responseText = response.responseText || '';
        if (responseText.length > 0) {
          result = eval('(' + responseText + ')');
        }
      }
    });
    if (result && result.success) {
      return;
    }
    else {
      var error = 'Your_changes_could_not_be_saved_period';
      if (window.opener) { // ie undocked
        //Show alert in the main window 
        window.opener.alert(error);
        return;
      }
      return error;
    }
  }
  // Set up auto save of rubric when window is closed
  Event.observe(window, 'unload', function() { 
    return save_ass_rub(); 
  });
</script>

能做这样的事吗?

After Linevar data = $('form').serialize(true); var split_data = data.split("&"); for (i = 0; i < split_data.length; i++) { var elem = split_data[i]; var split_elem = elem.split('='); if( split_elem[0].search(/key/) && split_elem[0] == '' ){ console.log( split_elem ); var error = 'Not all the elements are inputted'; window.opener.alert(error); return; } }

我不使用序列化的表单字符串,而是使用表单本身进行验证。如果$('form')是表单元素,那么创建一个单独的函数来检查表单元素是否被划分。

function checkform(form)
{
    var emptytexts = form.down('input[type="text"]').filter(function(input){
        if(input.value.length == 0)
        {
            return true;
        }
    });
    if(emptytexts.length > 0)
    {
        return false;
    }
    return true;
}

并且在save_ass_rub()功能中

//..snip
if(checkform($('form') == false)
{
    var error = 'Not all the elements are inputted';
    window.opener.alert(error);
    return;
}
var data = $('form').serialize(true);
var result;

我只在checkform()函数中添加了文本输入,您可以对其余的输入类型和该函数的任何其他奇怪处理进行处理。只要返回false,就会显示错误,js将停止,否则将继续