submitHandler:触发错误的对话框

时间:2014-03-03 17:34:35

标签: php jquery ajax

我正在尝试使用submitHandler:function调试我遇到的问题。发生了什么,在firebug中它根据submitHandler中的真实句柄显示正确的错误消息。但是,它触发了成功对话框,而不是错误对话框。我对jquery和ajax相当新,所以我可能在错误的位置得到一些括号或逗号。

如果有人能指出我的错误,我将不胜感激。感谢

submitHandler: function()   {
                if ($("#USRboxint").valid() === true)  { 
                var data = $("#USRboxint").serialize() + '&submit=true';
                $.post('/domain/users/box.php', data, function(msgs) {

                if (msgs.boxerror === true) {

                   var $dialog = $('<div id="dialog"></div>').html('<br /><b>Your New entry was NOT SUBMITTED.<br /><br />Thank you.</b>');
                   $dialog.dialog({
                   autoOpen: true,
                   modal: true,
                   title: 'New entry Unsuccessfull',
                   width: 400,
                   height: 200,
                   draggable: false,
                   resizable: false,
                   buttons: {
                   Close: function() {
                   $( this ).dialog( "close" );
                   }
                   }
                   });

                    }

                else

               var messageOutputs = '';
                for (var i = 0; i<msgs.length; i++){

                    messageOutputs += msgs[i].box+'  ';

                }



                $("#USRboxint").get(0).reset();

                var $dialog = $('<div id="dialog"></div>').html('<br /><b>Your New entry was successfully submitted.<br /><br />Thank you.</b>');
                   $dialog.dialog({
                   autoOpen: true,
                   modal: true,
                   title: 'New entry successfull',
                   width: 400,
                   height: 200,
                   draggable: false,
                   resizable: false,
                   buttons: {
                   Close: function() {
                   $( this ).dialog( "close" );
                   }
                   }
                   });

                //$("#frmreport").get(0).reset();
                }, 'json');

         } 
        },
        success:    function(msgs)   {

        } 

PHP代码

<?php

$boxerrortext = 'No duplicates';
$array = split('[,]', $_POST['box_add']);

     if (isset($_POST['submit']))   {
            if ($box == 'DEMO111')
            {

            $error = array('boxerror'=>$boxerrortext);
            $output = json_encode($error);

            echo $output;
            return;
            }
            else
      $form = array();
      foreach ($array as $box) {


      // if (empty($box)) {
       // $error = array('boxerrortext'=>$boxerrortext);

     // $output = json_encode($error);

     // echo $output;


     // }
    // else
     // {

     $form[] = array('dept'=>$dept, 
                 'company'=>$company,
                 'address'=>$address,
                 'service'=>$service,
                 'box'=>$box,
                 'destroydate'=>$destroydate,
                 'authorised'=>$authorised,
                 'submit'=>$submit);


      }

   } 
   $result=json_encode($form);

     echo $result;

?>

2 个答案:

答案 0 :(得分:1)

每次创建对话框效率不高,最好在文档就绪时初始化对话框:

$(function(){

    $('<div id="dialog_error"></div>').html('<br /><b>Your New entry was NOT SUBMITTED.<br /><br />Thank you.</b>').dialog({
        autoOpen: false,
        modal: true,
        title: 'New entry Unsuccessfull',
        width: 400,
        height: 200,
        draggable: false,
        resizable: false,
        buttons: {
            Close: function () {
                $(this).dialog("close");
            }
        }
    });


    $('<div id="dialog_success"></div>').html('<br /><b>Your New entry was successfully submitted.<br /><br />Thank you.</b>').dialog({
        autoOpen: false,
        modal: true,
        title: 'New entry successfull',
        width: 400,
        height: 200,
        draggable: false,
        resizable: false,
        buttons: {
            Close: function () {
                $(this).dialog("close");
            }
        }
    });

});

然后在需要时打开它们:

submitHandler: function () {
    if ($("#USRboxint").valid() === true) {
        var data = $("#USRboxint").serialize() + '&submit=true';
        $.post('/domain/users/box.php', data, function (msgs) {

            if (msgs.boxerror === true) {

                $("#dialog_error").dialog("open");//Open error dialog

            } else var messageOutputs = '';
            for (var i = 0; i < msgs.length; i++) {

                messageOutputs += msgs[i].box + '  ';

            }



            $("#USRboxint").get(0).reset();

            $("#dialog_success").dialog("open");//Open success dialog

            //$("#frmreport").get(0).reset();
        }, 'json');

    }
}

答案 1 :(得分:1)

你应该在else语句的代码周围添加大括号,否则只有第一行是else块的一部分,并且无论如何都会执行它之后的所有行。

改变这个:

else
    var messageOutputs = '';

对此:

else {
    var messageOutputs = '';

    // Other lines that belong in the else block.
}

我不同意Wilmer,但你应该在关闭时正确清理对话框。由于您创建div只是为了显示对话框一次,因此在关闭对话框时应将其删除。您可以通过添加以下对话框选项来执行此操作:

close: function() { $(this).dialog('destroy').remove(); },