2017-07-31 118 views
0

我有一个问题,我似乎无法来解决。首先可能相关的一些背景。阿贾克斯,jQuery验证和MVC

我建立一个MVC样(我说“喜欢”,因为我仍然在学习如何MVC的作品),我的软件PHP框架。我希望所有输入表单都通过ajax将数据提交给后端控制器,后者将数据路由并将其输入到相应的数据库中。所有的HTML代码都是通过php类和通过php类包含的JavaScript生成的。

我遇到的问题是用AJAX功能。当我希望它异步提交时,它会继续尝试正常提交发布请求。我已经在各个时间点正常工作,但是当我改变框架的各个方面时,它似乎中断了。我试过了各种各样的“form.preventDefault()”和“return false”的组合,但它似乎并不重要。验证部分工作(不会使用无效条目提交,使用this插件)。我发现JavaScript缓存本身,并且通过将版本号附加到文件名来解决这个问题。

这里是Ajax代码。它向用户返回关于请求状态的消息。任何想法为什么它拒绝提交异步?

  $(document).ready(function() { 
      // Initialize form validation 
    ***old code 
$("form[name='ajaxform']").validate({ *** 
     // Specify validation rules 

    ***Updated code 
     $('#ajaxsubmit').on('click', function() { 


     $("#ajaxform").valid(); 
    }); 
    // Initialize form validation 
$('#ajaxform').validate({ *** 


    ....[omitting the validation rules for brevity] 

     errorElement : 'div', 
     errorLabelContainer: '#usermessage', 

    submitHandler: function(form) { 
     $.ajax({ 
      cache : false, 
      url  : $(form).attr('action'), 
      type : 'POST', 
      dataType: 'text', 
      data : $(form).serialize(), 
      success : function(data) { 
       var response = $.parseJSON(data); 
       if(response['error']){ 
        $('#usermessage').html(response['error']); 
        }else{ 
        if(response['success']){ 
        $('#usermessage').css({"color":"#00b300","font-weight":"bold"}); 
        $('#usermessage').html(response['success']); 
        } 
        } 
       }, 
       error : function(err) { 
          alert(err); 
       } 
      });  
    return false; 
    } 
    }); 

    }); 
+0

@shamelessApathy,因为验证插件响应表单提交,你会怎么触发的插件,如果你改变了按钮类型“按钮,”你说什么? – AppreciateCo

+0

我刚刚发现了这个。 https://www.google.com/url?sa=t&source=web&rct=j&url=https://stackoverflow.com/questions/13671710/jquery-form-validation-on-button-click&ved=0ahUKEwjH3P75k7TVAhVV2GMKHYViD-AQFggeMAE&usg=AFQjCNE9Q6JDrlG0zgDxgSCvEuoLggLruw。我会尝试并回复你。谢谢! – AppreciateCo

回答

0

以下是我如何处理表单试图提交的问题,即使我试图preventDefault()。

我还没有看到你的HTML标记,所以我不能肯定。

如果你有它

<button type='submit'>Submit</button> 

更改为

<button type='button'>Submit</button> 

,然后监听按钮点击使用JavaScript,而不是一个表单提交

+0

我试着改变提交按钮来输入“按钮”并更新我的代码,就像它在我提供的链接中描述的那样。虽然它不再正常提交(谢谢),并且不会触发ajax函数。任何想法为什么?我会更新我的代码。 – AppreciateCo

0

您可以更改处理程序:

submitHandler: function(form) { 

要处理的事件,以及:

submitHandler: function(form, event) { 
    event.preventDefault();