0

さらなる開発から、javascript を無効にして (Codeigniter コードを使用して) 完全に動作する AJAX および CI メールフォームがあり、AJAX を使用するといくつかのバグがあります。

不足しているボックスがあり、送信を押すと、エラー mmessage-great がポップアップ表示されますが、正しく入力して送信すると、受信ボックスに受信したメールがまだ正しいにもかかわらず、エラーが表示されます。これは本当に私を悩ませています私のAJAXコードの何かとして、コントローラーに何かが欠けていると思います。

別の質問: AJAX フォームでは、個人的なエラー/成功メッセージが投稿されています。CI $success と echo validation_errors(); をエコーする方法はありますか? これで、彼らは同じですか?

コードは私がこれまでに持っているものです:

私のコントローラーを見るには、このリンクに従ってください: Codeigniter AJAX email validation

見る

<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 に答える