在CodeIgniter

时间:2015-04-28 16:21:57

标签: php ajax codeigniter

我有一个函数,practiceTest,在我的视图中运行,我想为keyup事件设置一个事件处理程序。如果按下的键等于'f'或'j',则检查这是否是正确答案,此时,如果是,则执行一系列操作。如果没有,我希望它将变量'不正确'发送回控制器,在那里它将被重定向到另一个页面。出现的问题是它似乎连续循环回我的practiceTest控制器,好像答案不正确,但它在事件发生之前就这样做了。浏览器中没有显示任何内容,Chrome Develper工具中的“网络”选项卡只显示了到PracticeTest控制器的连续循环。有什么想法吗?

practiceTest功能:

function practiceTask(counter, test_key, test_id){

  setTimeout(function(){ display(counter, test_key)}, 500);

  function display(counter, test_key){

    $('#imageLocation').attr("src", 'sample');
    $('#imageLocation').show();
    start = new Date();

    $(document).on("keyup", function(e){
      guess = String.fromCharCode(e.which).toLowerCase();
      if (counter < test_key.length){
        if (guess == 'f' || guess == 'j'){
          if (guess == test_key[counter].answer){
              console.log(counter);
              console.log(test_key[counter]);
              $(document).off('keyup');
              $('#imageLocation').hide();
              counter++;
              practiceTask(counter, test_key, test_id); 
            }
          else{
            $.ajax({
              type: "POST",
              url: '<?php echo site_url('practiceTest'); ?>',
              data: {incorrect: 1},
              success: function(data){
                console.log(data);
              }
            });
            <?php redirect(site_url('practiceTest'), 'refresh') ?>;*/
          }
        }
      }
    });         
  }
} 

PracticeTestController:

class PracticeTest extends CI_Controller{

    function index(){

        $this->load->model('sample_practice');
        $incorrect = $this->input->post('incorrect');
        $data['incorrect'] = $incorrect;
        $test_id = 1;

        if ($incorrect){
           $this->load->view('practice_incorrect_view.php', $data);
        }
        else{
           $json_key = $this->sample_practice->getKey($test_id);

           $json_key = json_decode($json_key, true);
           shuffle($json_key);

           $data['test_key'] = $json_key;
           $data['test_id'] = $test_id;

           $this->load->view("practice_test_view.php", $data);
        }
    }
}

感谢您的帮助。关于如何更好地实现这一点的任何想法总是受到赞赏。

修改

如果我使用

window.location.href = '<?php echo site_url('practiceTest'); ?>';

在AJAX调用中的成功函数内部,它可以工作,但是然后在控制器中,检查是否$ wrong == 1的条件似乎不起作用。控制器加载practice_test_view,而不是practice_incorrect_view。

SOLUTION:

至少对于我的实例,通过应用我在上面的EDIT中所说的,但是重定向到控制器中的不同函数,并且该函数指向我希望显示的practice_incorrect_view,它起作用了。

0 个答案:

没有答案