关于ajax响应返回false不要工作和形式不要停止提交

时间:2016-12-29 15:19:41

标签: javascript php jquery ajax forms

我正面临问题,我正在使用ajax调用,返回false不能正常工作.. 成功提交表格..我希望当我得到答复1表格不提交..但在ajax请求回复表格仍然提交请帮助我..

这是代码:

<form action="<?php echo base_url(); ?>do/add/review" method="post" name="dologin" id="dologinsubmitreview" onSubmit="return showpopupbox();">


function showpopupbox(){      
    var strs = $("form").serialize();
          var autocompleteURL = "<?php echo base_url(); ?>grahak/save_record_session?rnd=" + Math.random() +"&sessiondata="+ $("form").serialize();
            $.ajax({
                    url : autocompleteURL,
                    async: false,
                    cache: false,
                    method : "POST",
                    success : function(respd)
                    {
                        if(respd == 1){
                            $("#classiconpopupbx").show();
                            return false;
                        }
                        else {
                            return true;
                        }
                    }
                });
}

2 个答案:

答案 0 :(得分:1)

您需要重新设计流量。 Javascript是异步的,这意味着表单在AJAX调用完成之前提交了LONG。

相反,使用jQuery on绑定到事件,捕获函数中的事件,并立即运行event.preventDefault(),这将阻止表单提交。然后运行你的AJAX电话。

在你的AJAX成功功能中,你需要决定当它回来时“做什么”。如果不了解你想要的结果,就不可能建议如何处理这件事。

<!-- remove the inline onsubmit script handler -->
<form action="<?php echo base_url(); ?>do/add/review" method="post" name="dologin" id="dologinsubmitreview">


// no-conflict safe document ready
jQuery(function($) {
    // Bind to the form submit here, and call event.preventDefault immediately
    $('#dologinsubmitreview').on('submit', function(event) {
        event.preventDefault();
        showPopUpBox(event);
    }

    function showpopupbox() {      
        var strs = $("form").serialize();
        var autocompleteURL = "<?php echo base_url(); ?>grahak/save_record_session?rnd=" + Math.random() +"&sessiondata="+ $("form").serialize();
        $.ajax({
            url : autocompleteURL,
            async: false,
            cache: false,
            method : "POST",
            success : function(respd) {
                if(respd == 1){
                    $("#classiconpopupbx").show();
                } else {
                    // Do what you need to do here if the AJAX is true
                }
            }
        });
    }
});

答案 1 :(得分:0)

你可以这样做的一种方法是阻止提交,总是,然后如果你的Ajax调用返回true,发布表单(告诉代码这次允许它):

对于初学者,不要将内联事件处理程序与jQuery混合使用。 jQuery方式更好:

// Start by not allowing submit
var allowSubmit = false;
$('form').submit(function(){
    var $form = $(this);
    // Only run the ajax if this is not a "real" submit
    if (!allowSubmit){
        // do the ajax call
        $.ajax({
           url: ...
           success: function(respd){
              if(respd == 1){
                  $("#classiconpopupbx").show();
              }
              else {
                  allowSubmit = true;
                  $form[0].submit(); // important - bypass jQuery event handler
              }
           } 
        });
    }
    // Conditionally allow the form to submit
    return allowSubmit;
});