Ошибка проверки формы в CodeIgniter из запроса AJAX - PullRequest
0 голосов
/ 06 сентября 2018

Произошла ошибка с моим кодом PHP и jQuery следующим образом:

JQuery:

$('#form').submit(function(e){
    e.preventDefault();
    var me = $(this);
    var data = me.serialize();
    $.ajax({
        method :'POST',
        url:me.attr('action'),
        data:{data},
        dataType:'json',
        async:false,
        success:function(data){
            alert(data.success);
            if(data.success == true){
                alert('true');
            }
            else{
                alert('false');
            }
        }
    });
});

HTML-форма:

    <?= form_open('practice/check', array('id'=>'form'))?>
    <input type="text" name="username">
    <input type="password" name="password">
    <button type="submit" name="button" id="submit">click</button>
    <?= form_close();?>

PHP контроллер:

public function check(){
    $this->load->library('form_validation');
    $data= array('success'=>false, 'message'=>array());
    $this->form_validation->set_rules('username','Username','trim|required');
    $this->form_validation->set_rules('password','Password','required');

    if($this->form_validation->run() == false){
      foreach ($_POST as $key => $value) {
        $data['message'][$key] = form_error($key);
      }
    }
    else{
      $data['success'] = true;
    }
    echo json_encode($data);
}

когда событие оповещения происходит в коде jquery, всегда ложное возвращение, даже если поля заполнены .., пожалуйста, помогите мне и заранее спасибо ..

1 Ответ

0 голосов
/ 06 сентября 2018

Вам нужно изменить

data: { data }

до

data: data

в вашем коде AJAX.

То, что делает ваша версия, это оборачивает данные внутри дополнительного объекта. Это приводит к тому, что отдельная переменная с именем «data» отправляется на сервер в теле запроса, например:

data=username%3Duser123%26password%3Dabcdef

Когда то, что вы действительно хотите, это:

username=user123&password=abcdef

Следовательно, PHP не распознает значения, которые вы отправляете. Он может видеть только одну переменную с именем «data», которая, насколько это касается, содержит случайную строку. Он должен иметь возможность видеть переменные «username» и «password» отдельно.

Если вы посмотрите на этот JSFiddle http://jsfiddle.net/jcx2Ly5e/3/ с открытыми сетевыми инструментами - отправьте форму и просмотрите два запроса в "test.php". Первое неверно, а второе - правильно. Загляните внутрь тела каждого запроса, чтобы увидеть разницу.

P.S. Как вы заметите, все это не имеет ничего общего с JSON. Ваш PHP возвращает JSON, но данные формы отправляются в стандартном формате, закодированном по URL-адресу формы. JSON не является частью проблемы, поэтому я отредактировал ваш вопрос, чтобы удалить это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...