Ошибка при передаче данных из представления в контроллер с помощью ajax - PullRequest
0 голосов
/ 05 января 2019

Мне нужно передать идентификатор проверенного поля и строку «проверено» в базу данных через ajax. Я совсем не знаком с ajax

      <h2 id="h2">To Do List</h2>
      <ul id="new">
       <?php if(!empty($details)){ foreach($details as $key => $del) {  ?>
   <li id="try-0"><input class= "box" type="checkbox"><input class="set field" name="list[]" type="text" value="<?php echo $del['value'];?>"></li>          
          <?php  } ?>

                <li id="try-0"><input class= "box" type="checkbox"><input class="set field" name="list[]" style="margin: 5px 0 5px 10px;width: 297px;height: 35px;" type="text" value=""></li>

     <?php } else{ ?>

        <li id="try-0"><input class= "box" type="checkbox"><input class="set field" name="list[]" type="text" value=""></li>
      <?php } ?>   

     </ul>
        <button class="btn btn-info" id="btn1">add</button></div>
        <div class="col-md-2">
        <button class="btn btn-info" id="btn2" type="submit" value="submit" formaction="<?php echo base_url();?>homeController/upload">Save</button></div>

      </div>
    </div>

Javascript

<script type="text/javascript">


$(document).ready(function() {

      var x =1;
      $('#btn1').hide();
      $('body').on('keyup', '.field', function(){
        var search_text = $('.field').last().val();
          if(search_text==""){
              $('#btn1').hide();
          }else{
     $('#btn1').show();
    }
  });
      $("#btn1").click(function (event) {
            event.preventDefault();
           $('#new').append('<li" id="try-'+x+'"><input class= "box" type="checkbox"><input  name="list[]" class="set field" type="text" value=""></li>'); 
      $('#btn1').hide();
            x++;      
       });

       $('body').on('click', '.box', function(){
         var sta = 'checked';
    // i also need to pass the id of the clicked checkbox
                    $.ajax({
        type: "POST",
        url: "<?php echo base_url();?>homeController/statuspass",
        data: {search_name:sta},
        success: function(data){
         // console.log(success);

        }
                });
                  });

});
</script>

Когда я устанавливаю флажок, идентификатор и флажок необходимо передать контроллеру, и мне нужно сохранить строку в базе данных.

Когда я пытаюсь, я получаю эту ошибку:

    POST http://localhost/todolist/homeController/statuspass 500 (Internal Server Error)
send @ jquery.min.js:2
ajax @ jquery.min.js:2
(anonymous) @ (index):146
dispatch @ jquery.min.js:2
y.handle @ jquery.min.js:2

Ответы [ 3 ]

0 голосов
/ 05 января 2019

Ваш код Js обычно должен выглядеть примерно так:

$(document).on('click', '#myFormSubmit', function(event) {
    event.preventDefault();

    var id = $('#hiddenInputThatHasMyID').val();
    var blah = 'blah';
    var blahblah = 'blahblah',

    // I expect you to already know how to get the above vars or you can search an learn how to retrieve them, its not the purpose of your question here.

    // You can serialize your form like this
    // var data = $('form#myForm').serialize();

    // Or create it manually like this
    var data = {id:id, blah:blah, blahblah:blahblah};

    $.ajax({
        url: "<?= site_url('controller/method') ?>",
        method: 'POST',
        data: data,
        dataType:'JSON',
        success: function(response) {
            console.log(response);
        },
        error: function(response) {
            console.log(response);
        }
    });
});

Это отправит ваши данные на этот controller/method и получит от них ответ, поэтому в методе вашего контроллера вы можете подождать этого:

public function method()
{
    $id = $this->input->post('id');
    $blah = $this->input->post('blah');
    $blahblah = $this->input->post('blahblah');

    // Do your magic here and return vars
    $data['ret_var1'] = 'val1';
    $data['ret_var2'] = 'val2';

    // echo your data
    header('Content-Type: application/json');
    echo json_encode($data);
}

Теперь в своем ответе на ajax вы можете использовать свои переменные следующим образом:

var var1 = response.var1;    // val1
var var2 = response.var2;    // val2

Надеюсь, это достаточно ясно.

Примечания:

Всегда используйте URL, как это url: "<?= site_url('controller/method') ?>"

0 голосов
/ 07 января 2019

код воспламенителя URL хорош с меньшим счетом позже. измените имя вашего контроллера homeController на home_controller и проверьте, чтобы имя контроллера начиналось с заглавной буквы позже, а в примечании к дозе прописная буква должна приниматься позднее позже и там же, где вы продлили CI_Controller, а во-вторых убедитесь, что у вас есть метод statuspass, доступный в вашем классе контроллера homeController или нет.

0 голосов
/ 05 января 2019

Вы получили ошибку на стороне сервера. Попробуйте отладить ваш php с помощью сообщений xDebug или die () в действии вашего контроллера, чтобы увидеть, что там происходит.

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