2013-03-11 5 views
1

Посмотрев решение на ci-ajax-csrf-problem Я добавил следующую строку в скрипт, и он отлично работает.CodeIgniter, вызов Ajax не попадает в контроллер

var post_data = { 
    '<?php echo $this->security->get_csrf_token_name(); ?>' : '<?php echo $this->security->get_csrf_hash(); ?>' 
} 

вставляется в

$.ajax({ 
     url: '<?php echo base_url()."ajax/test";?>', 
     type:'POST', 
     dataType: 'json', 
     data: post_data, 

Спасибо за помощь всем :)

Я новичок в Ajax/Jquery и следующее руководство по Ajax для CodeIgniter из jorge torres реализовать простой ajax на моем сайте и столкнулись с проблемами.

Я создал контроллер Ajax, и это фрагмент кода.

class Ajax extends CI_Controller { 

    public function __construct() { 
     parent::__construct(); 
    } 

    public function test() { 
     $output_string = 'This is a test'; 
     echo json_encode($output_string); 
    } 

    public function test2(){ 
     $this->load->view('test.php'); 
    } 
} 

И это мнение для этого контроллера, его идентична той, из учебника, кроме добавил я загрузил URL хелпер $ this-> load-> помощник («URL»); в первой строке

Вот фрагмент кода сценария.

#getdata тип кнопки и #result_table является ДИВ

$('#getdata').click(function(){ 
$.ajax({ 
     url: '<?php echo base_url().'ajax/test';?>', 
     type:'POST', 
     dataType: 'json', 
     success: function(output_string){ 
       $('#result_table').append(output_string); 
      } // End of success function of ajax form 
     }); // End of ajax call 
}); 

Я могу успешно получить доступ к localhost.com/codeigniter/ajax/test2 но когда я нажал на кнопку, ничего не произойдет.

Я пытался смотреть на информацию источника страницы и URL правильно

$.ajax({ 
     url: 'http://localhost/codeigniter/ajax/test', 
     type:'POST' 
     .... 

Доступ локальный/CodeIgniter/Ajax/тест непосредственно также можно и отобразить выходное сообщение.

Я использую CodeIgniter 2.1.3 и мой локальный работает на XAMPP 1.7.3

Спасибо заранее :)

+0

проверить вашу консоль браузера для erros –

+0

ни у вас, завернутые код JQuery в $ (документ) .ready (функция() {...}); ..? –

+0

Я рекомендую вам установить firebug или какие-то инструменты для разработчиков. Проверьте консоль на наличие ошибок. – Samy

ответ

4

Посмотрев решение на ci-ajax-csrf-problem Я добавил в скрипт следующую строку, и она отлично работает.

var post_data = { 
    '<?php echo $this->security->get_csrf_token_name(); ?>' : '<?php echo $this->security->get_csrf_hash(); ?>' 
} 

вставляется в

$.ajax({ 
     url: '<?php echo base_url()."ajax/test";?>', 
     type:'POST', 
     dataType: 'json', 
     data: post_data, 

Спасибо за помощь всем :)

0

Я думаю, что есть проблема с AJAX вызова. Должно быть, как это, я думаю:

$(document).ready (function() { 
    $('#getdata').click(function(){ 
    $.ajax({ 
     url: '<?php echo base_url()."ajax/test";?>', 
     type:'POST', 
     dataType: 'json', 
     success: function(output_string){ 
       $('#result_table').append(output_string); 
      } // End of success function of ajax form 
     }); // End of ajax call 
    }); 
}); 

Если консоль Firebug говорит о том, что действие требует не допускается, то это может быть маркером вопрос CSRF, выключите его в CodeIgniter конфигурации.

Добавьте это в конфигурационный файл.

$config['csrf_protection'] = FALSE; 

Надеется, что это помогает :)

+0

Извините за поздний ответ, да Это было вызвано тем, что CSRF включен, я нашел решение, и он отлично работает :) Спасибо за помощь – Fandy

0

ли ваш .click) обработчику событий (работает, как ожидалось?

$('#getdata').click(function(){ 
alert('clicked'); 
........ 

если нет, попробуйте завернутые код JQuery in $(document).ready(function() { ... });, как @Sudhir предложил:

$(document).ready(function() { 
     $('#getdata').click(function(){ 
     alert('clicked'); 
     ........ 

}); 

если да, то в случае, если вы не знаете еще, есть инструмент под названием firebug, чтобы проверить ваши Запрос AJAX. Я думаю, что нет проблем с вашим URL-адресом AJAX. До сих пор это мой ответ. Надеюсь, это тоже поможет.

+0

Спасибо за ответ , Я проверил консоль с помощью firebug, и он возвращает 500 Internal Server Error с сообщением «Запрошенное действие не разрешено». – Fandy

0

У вас есть разрешение сжатия (gzip) в вашем config.php? Если вы сжимаете свой вывод, он будет терпеть неудачу, если вы используете эхо и вернете 500 ошибок сервера.

+0

Спасибо за ответ, я проверил конфигурацию и отключил ее. – Fandy

+0

Извините, только что вспомнил, что другая причина была csrf. Попробуйте выключить его, чтобы проверить. Если это работает, проверьте здесь обходной путь http://stackoverflow.com/questions/7351849/codeigniter-csrf-jquery-ajax-problem –

+0

Ах спасибо за ссылку, я попытаюсь ее реализовать: D – Fandy

0

Вы пробовали

$(document).ready (function() { 
    $('#getdata').click(function(){ 
    $.ajax({ 
     url: '/ajax/test', 
     type:'POST', 
     dataType: 'json', 
     success: function(output_string){ 
       $('#result_table').append(output_string); 
      } // End of success function of ajax form 
     }); // End of ajax call 
    }); 
}); 

как соединенный с <?php base_url; ?>

Вы ввели свой сайт URL в CI конфигурации?

Смежные вопросы