Javascript Rails、AJAX表单验证

Javascript Rails、AJAX表单验证,javascript,jquery,ruby-on-rails,ajax,Javascript,Jquery,Ruby On Rails,Ajax,一般来说,我对jQuery、AJAX和javascript都是新手,我正在尝试对rails表单进行前端验证,该表单使用AJAX调用让服务器运行查询。如果我在调试器中(因为AJAX调用有足够的时间返回并停止表单的提交),它似乎工作得很好,但是当我在没有调试器的情况下测试表单时,它不会一直工作。我相信这是因为在ajax调用之后,javascript验证方法退出,表单提交。这是我的javascript方法 $('#runner-job-submit').click(function(e) {

一般来说,我对jQuery、AJAX和javascript都是新手,我正在尝试对rails表单进行前端验证,该表单使用AJAX调用让服务器运行查询。如果我在调试器中(因为AJAX调用有足够的时间返回并停止表单的提交),它似乎工作得很好,但是当我在没有调试器的情况下测试表单时,它不会一直工作。我相信这是因为在ajax调用之后,javascript验证方法退出,表单提交。这是我的javascript方法

  $('#runner-job-submit').click(function(e) {
    runnerJobValidation(e);
  });

  function runnerJobValidation(e) {
    var user_login = $('#user_login').val();
    var name = $('#name').val();
    var location = $('#location').val();
    var description = $('#description').val();
    var user_exists;
    //AJAX call to check if user exists in the database
    $.post("/jobs/user_exists", {user_login: user_login}, function (response) {
      if(response == "false") {
        $('#runner-new-job-errors').html('');
        e.preventDefault();
        $('#runner-new-job-errors').append('<small style="color:red"> User doesnt exist </small>');
      }
    });
    if(user_login == "" || name == "" || location == "" || description == "") {
        $('#runner-new-job-errors').html('');
        e.preventDefault();
        $('#runner-new-job-errors').append('<small style="color:red"> Please fill out all fields </small>');
      }

  }

有人能告诉我正确的方法吗。我觉得解决方案是在从服务器接收到
响应之前以某种方式阻止
runnerJobValidation()
退出,但我不知道怎么做。

您正在尝试发出同步ajax请求。简而言之,您可以通过将ajax对象中的async设置为false来实现

您可以在此处找到解决方案:


希望对您有所帮助。

您可以像这样使用jQuery验证插件

对于验证,您应该添加新的验证方法

大概是这样的:

jQuery.validator.addMethod("user_exists", function(value, element, param) {
    var isSuccess = false;
    isSuccess = $.ajax(type: "POST", url: "/jobs/user_exists", data: {user_login: user_login}, dataType: "json").responseText == "false" ? false : true;
    return isSuccess;
}, jQuery.format("User already exists!"));
提交表格:

 $("#myform").validate({
  submitHandler: function(form) {
    // some other code
    // maybe disabling submit button
    // then:
    $(form).submit();
  }
 });

关于如何正确使用插件阅读文档,请访问

查看客户端验证gem。您可以看到相同[1]的[railscasts][1]:
 $("#myform").validate({
  submitHandler: function(form) {
    // some other code
    // maybe disabling submit button
    // then:
    $(form).submit();
  }
 });