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

标签 javascript jquery ajax prototypejs

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

在我的应用程序中,我有一个自定义窗口,允许用户输入数据。我能够捕获此步骤中的所有数据: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>

这样的事情可以做吗?

行后 var 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停止,否则继续

关于javascript - 如何在 Ajax 中验证序列化数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25868568/

相关文章:

javascript - 返回我在 UIWebView 中访问的网页的标题

javascript - 类型错误 : invalid 'in' operand obj

javascript - XMLHttpRequest 无法加载。 。 。请求的资源上不存在 'Access-Control-Allow-Origin' header 。

c# - ASP.net 发布一个元素名称前缀为 "ct100$"的表单

javascript - 如何在ajax获取函数(msg)中追加子项?

jquery - 使用 jQuery 解析 JSON [2]

asp.net - jQuery/ASP MVC -- "$.ajax"调用中的解析器错误

javascript - 即使在聊天中发送文本后,文本消息也不会清除

jquery - 使用 Ajax 使用 Select2 设置加载初始值

javascript - 如何使用 Chart.js 在圆环图的中心添加文本?