0

从进一步的发展来看,我有一个 AJAX 和 CI 电子邮件表单,它可以在禁用 javascript(使用 Codeigniter 代码)的情况下完美运行,并且在使用 AJAX 时存在一些错误。

当缺少框并按提交时,它会弹出错误mmessage-great,但是当正确填写并提交时,即使正确并且我仍然在收件箱中收到电子邮件,它仍然会发布错误。这真的让我很烦因为它在我的 AJAX 代码中,我认为我的控制器中缺少一些东西。

另一个问题:在 AJAX 表单上,它发布了个人错误/成功消息——有没有办法回显 CI $success 和回显验证错误();在这方面他们是一样的吗?

代码是我到目前为止所拥有的:

要查看我的控制器,请点击此链接: Codeigniter AJAX 电子邮件验证

看法

<h1>Contact</h1>
<div id="contact">
<?php
//This is loaded in the view as it wont be used in the other pages
$this->load->helper('form');

echo form_open('contact/send_email');

//success message if passed validation checks
echo '<div id="success">';
echo $success;
echo '</div>';

 // empty div for error messages (ajax)
echo '<div id="errors">';

// empty div for error messages (php)
if(validation_errors() != ""){
    echo '<h3>Please correct the following errors:</h3>'; 
    echo validation_errors();
}

echo '</div>';

echo form_label('Name: ', 'name');
    $data = array (
        'name' => 'name',
        'id' => 'name',
        'value' => set_value('name')
    );
echo form_input($data);


echo form_label('Email: ', 'email');
    $data = array (
        'name' => 'email',
        'id' => 'email',
        'value' =>set_value('email')
    );
echo form_input($data);


echo form_label('Message: ', 'message');
    $data = array (
        'name' => 'message',
        'id' => 'message',
        'value' =>set_value('message')
    );
echo form_textarea($data);
?>

<br />

<?php
echo form_submit('submit', 'Send');

echo form_close();
?>

AJAX

<script type="text/javascript">
$(function() {
    $('form').submit(function() {

        // get the form values
        var form_data = {
            name: $('#name').val(),
            email: $('#email').val(),
            message: $('#message').val()
        };

        // send the form data to the controller
        $.ajax({
            url: "<?php echo site_url('contact/send_email'); ?>",
            type: "POST",
            data: $(form_data).serialize(),
            success: function(msg) {

            if(msg.validate)
                    {
                    $('form').prepend('<div id ="success">Success</div>');
                    $('#success').fadeOut(5000);
                    }else
                     $('form').prepend('<div id ="errors">Error</div>');
                     $('#errors').fadeOut(5000);
                }
            });
            // prevents from refreshing the page
            return false;   
        });
    });
    </script>
4

1 回答 1

0

在我看来这条线(在你的 javascript 中)

if(msg.validate)

正在寻找一个对象,您的脚本实际上并未解析任何 JSON 或返回任何 JSON。

我在这里只能假设是一个好主意(在查看您的控制器之后)将检查<div id="errors">响应中是否有任何内容

然后在你的javascript中你需要做一些改变

success: function(msg) {
            if(msg.validate)
            {
               $('form').prepend('<div id ="success">Success</div>');
               $('#success').fadeOut(5000);
            }
            else
            {
               $('form').prepend('<div id ="errors">Error</div>');
               $('#errors').fadeOut(5000);
            }
});

会变成

success: function(msg) {
            $msg = $(msg);
            // check to see if the div with id="errors" contains a h3 tag
            if($msg.filter('#errors').find('h3').length < 1)
            {
               $('form').prepend('<div id ="success">Success</div>');
               $('#success').fadeOut(5000);
            }
            else
            {
               $('form').prepend('<div id ="errors">Error</div>');
               $('#errors').fadeOut(5000);
            }
});

注意:我已经把它写在袖口上,所以我没有实际测试过,但它应该为你指明正确的方向。

编辑为使用 id 选择器而不是类选择器(我的习惯)

于 2012-11-15T12:58:41.737 回答