Подтвердить что ты не робот

Изучение того, как использовать AJAX с CodeIgniter

Это как-то неловко, что мне так трудно научиться 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 (я предполагаю, что возврат TRUE, вероятно, не сработает, возможно, XML или JSON или что-то в этом роде?) и как мне получить доступ к данным с помощью JavaScript?

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

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

4b9b3361

Ответ 1

вы просто распечатали его в основном и повторно захватили бы эту информацию через 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"
});

Ответ 2

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

$this->input->is_ajax_request();

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

Я также пробовал метод в этой статье, который не работал: 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, еще не успели исследовать.