Научиться использовать AJAX с CodeIgniter - PullRequest
10 голосов
/ 21 ноября 2008

Мне стыдно, что мне так трудно изучать JavaScript, но ..

Допустим, у меня действительно простой контроллер, подобный этому:

class front extends Controller {

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

    public function index()
    {
        //nothing!
    }

    public function test () {

        $someNumber = $this->input->post('someNumber');

        if ($someNumber == 12) { return TRUE; }

    }

}

Да, это могло бы быть написано лучше, ха-ха.

Что я хочу знать - как я могу использовать JavaScript для отправки числа в форме (я буду беспокоиться о проверке и моделях позже), как мне написать свою функцию test (), чтобы она возвращала что-то читаемое JavaScript (я предполагаю, что return TRUE, вероятно, не будет работать, возможно, XML или JSON или что-то в этом роде?), и как мне получить доступ к данным с помощью JavaScript?

Я знаю, что есть фреймворки, такие как jQuery, которые помогут с этим, но сейчас я просто хотел бы понять это на самом простом уровне, и все учебники и руководства, которые я нашел до сих пор, слишком глубоки для меня. , Пример в jQuery или что-то еще было бы хорошо.

Большое спасибо:)

Ответы [ 2 ]

14 голосов
/ 21 ноября 2008

вы просто распечатали бы его и перехватили эту информацию через javascript:

public function test() {
    $somenumber = $this->input->post('someNumber');
    if ($somenumber == 12) {
        print "Number is 12";
    } else {
        print "Number is not 12";
    }
}

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

var xhr;
xhr = new XMLHTTPRequest();
xhr.onreadystatechange = function() {
    if (xhr.readyState == 4) {
        // this is where the return information is
        alert('Status: '+xhr.status+' Response: '+xhr.responseText);
    }
}

xhr.open('POST', '/front/test');
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
xhr.send('someNumber=12');

приведенный выше код не учитывает специфические проблемы браузера, но, по крайней мере, должен работать на firefox / ie7.

вот пример всего вышесказанного в jQuery:

var options = {
    'someNumber' : 12
}

$.post('/front/test', options, function(data) {
    alert(data); // should print "Number is 12"
});
3 голосов
/ 15 декабря 2011

Я также обнаружил в CodeIgniter, что «XMLHTTPRequest» не возвращается в заголовках ответа при использовании стандартного вызова AJAX Javascript, как упомянуто выше.

$this->input->is_ajax_request();

Помощник ввода никогда не вернет true, если вы не используете jQuery для обработки запроса AJAX POST.

Я также попробовал метод из этой статьи, который не работал: http://developer.practicalecommerce.com/articles/1810-The-Benefit-of-Putting-AJAX-and-CodeIgniter-PHP-Together

Это то, что я использовал в конце:

    var query_params = $('#data-form').serialize();
    $.ajax({
        type: 'POST',       
        url: 'process_this.php",
        data: queryParams,
        context: document.body,

    success: function(){
        alert('complete'); // or whatever here
    }

Возможно, это вызвано проблемой конфигурации, связанной с моей установкой CI, но у меня еще не было времени на расследование.

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