我有一个函数,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,它起作用了。