CI_model неправильно перехватывает POST-данные JSON - PullRequest
0 голосов
/ 07 марта 2012

После множества кодов, я чувствую, что наконец-то в какой-то степени оборачиваюсь вокруг AJAX, JSON и CI.

Однако я чувствую, что столкнулся с одним последним препятствием.Ниже мой код:

HTML

<div id="structures">
    <h1>Build</h1>
    <form name="buildForm" id="buildForm" method="POST" action="<?php echo base_url(); ?>/ajax/index/">
        <select name="buildID" class="buildClass">
        <option value="0" selected="selected" data-skip="1">Build a Structure</option>
<?php foreach ($structures as $structure_info): ?>
    <option name='<?php echo $structure_info['str_name'] ?>' value='<?php echo $structure_info['str_id'] ?>' data-icon='<?php echo $structure_info['str_imageloc'] ?>' data-html-text='<?php echo $structure_info['str_name'] ?><i>
        <?php echo $structure_info['timebuildmins'] ?> minutes<br><?php echo $structure_info['buy_gold'] ?> gold</i>'><?php echo $structure_info['str_name'] ?></option>
<?php endforeach ?>
        </select>
        <div id="buildSubmit">
            <input id ="btnSubmit" class="button" type="submit" value="Submit"/>
        </div>
    </form>
</div>

Здесь я просто строю свою форму.

AJAX / JS

$(function(){
    $("#buildForm").click(function(e, buildID){
        e.preventDefault();
        var frm = $(document.buildForm);
        var dat = JSON.stringify(frm.serializeArray());
        alert("I am about to POST this:\n\n" + dat);
        $.post(
            frm.attr("action"),
            dat,        
        function(response) 
        {  
            alert(response);
        }  
    );
});
});

Функция модели

public function insert_build()
   {    
      $str_id = $this->input->post(dat);
      print_r($str_id);
   }

Я создал новое расширение класса контроллера «Ajax» и функцию «index». Это просто вызывает мою модель «insert_build».Это был мой обходной путь: убрать файл .js со страницы и сохранить его в заголовке.

Во всяком случае.Когда я нажимаю кнопку отправки, он успешно оповещает о выходе JSON.Хотя после того, как он передается в контроллер-> модель, он, кажется, никуда не улавливается.Я предполагаю, что я делаю это неправильно, но не могу понять, что.

Спасибо за помощь.

Ответы [ 2 ]

1 голос
/ 07 марта 2012

почему бы не использовать $ .ajax?

$('#buildForm').live('click', function(event){
 var data = $('form[name="buildForm"]').serialize();
  $.ajax({
         url:'<?php echo base_url(); ?>ajax',
         data:data,
         type:'post',
         success:function(result){
            alert(result);
         },
         error:function(result){
            alert(result);
         }
  });
});

надеюсь, это поможет

1 голос
/ 07 марта 2012

Попробуйте пару вещей здесь.

После var frm = $(document.buildForm); попробуйте указать его значение действия

alert(frm.attr("action"));

, чтобы убедиться, что ваш $.post действительно получает действительный URL.

Затем попробуйте изменить функцию insert_build, чтобы просто распечатать то, что она получает.Вы не должны звонить $this->input->post(dat);, потому что у вас не будет поста с именем dat.

public function insert_build()
{
    print_r($_POST);
}

РЕДАКТИРОВАТЬ

Вам нужно будет пройтиСтрока JSON в качестве параметра URL.Попробуйте

$.post(frm.attr("action"), {data:dat}, function(response) 
    {  
        alert(response);
    });

и затем измените свой PHP на

public function insert_build()
{    
    $str_id = $this->input->post('data');
    print_r(json_decode($str_id));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...