2

codeigniter uri 言語識別子と form_validation の操作に問題があります。

問題は、$config['lang_ignore'] を FALSE に設定すると、form_validation が機能しなくなることです。codeigniter の wiki で述べ​​られているように、クリーンな codeigniter インストールとセットアップ uri 言語識別子でテストしました。

これが私のコントローラー application/controllers/form_validation_test.php です:

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Form_validation_test extends CI_Controller {

public function __construct()
{
    parent::__construct();
}

public function index()
{   
    $this->load->view('form_validation_test_view');
}



//Get Ajax POST:
public function getPost()
{
    $result = FALSE;
    $data = NULL;

    $this->load->library('form_validation');

    $this->form_validation->set_rules('user','User','required');

    $result = $this->form_validation->run();

    $response = array(
        'result' => $result
    );

    $this->output->set_content_type('application/json')
            ->set_output(json_encode($response));
}
}

application/views/form_validation_view.php を表示:

<script src="http://ci_test.localhost/js/jquery-1.8.2.min.js" type="text/javascript"></script>
<script type="text/javascript" src="http://ci_test.localhost/js/ci_test.js"></script>

<form name="formulario" id="formulario" action="http://ci_test.localhost/form_validation_test/getPost">
    <input type="text" id="user" name="user" value="">
</form>

<input type="button" id="btnSubmit" value="submit">

<div id="result"></div>

および Javascript ファイル js/ci_test.js:

jQuery(document).ready(function(){

jQuery('#btnSubmit').click(function(){

    var postData    = jQuery('#formulario').serialize();
    var targetUrl   = jQuery('#formulario').attr('action');     

    jQuery.ajax({
        url:        targetUrl,
        data:       postData,
        type:       'post',
        dataType:   'json', 

        success:    function (data, textStatus, jqXHR) {
            res = data.result ? 'TRUE':'FALSE';
            jQuery('#result').html(res);

        }

    });
});
});

ご覧のとおり、ajax リクエストを介して投稿を送信し、結果を取得して div に配置するだけです。「lang_ignore」を TRUE に設定すると機能しますが、FALSE に設定すると機能しません。

私が観察したもう 1 つの動作は、すべてが正常に動作している場合、firebug に POST リクエストが表示されますが、lang_ignore を FALSE として使用すると、POST リクエストと GET リクエストがロードされたままになっていることがわかります。なぜこれが起こるのかわかりませんが、誰かが問題を見つけるのに役立つかもしれません.

どんな助けでも大歓迎です。お時間をいただきありがとうございます。

4

1 に答える 1

0

解決策を見つけました。

lang_ignore パラメーターを FALSE に設定すると、application/core/MY_lang.php ファイルのコンストラクターがリダイレクトを 1 回実行し、(間違っていたら訂正してください) POST が失われます。

したがって、言語セグメントを含めることは、1 つの要求で直接行われます。

http://ci_test.localhost/en/form_validation_test/getPost

それは私のために働いた、希望は誰かを助けることができます

于 2012-11-10T20:03:26.223 に答える