CodeIgniter / Ajax - отправляет значения сообщений в контроллер - PullRequest
4 голосов
/ 03 апреля 2011

Я работаю над простой формой входа. Когда пользователь нажимает кнопку «Вход в систему», я хочу отправить значения публикации на мой контроллер, проверить их по моей базе данных (используя модель) и вернуть значение. Исходя из этого значения, я хочу либо отправить пользователя в личный кабинет, либо отобразить сообщение об ошибке в моей форме. Это сообщение об ошибке имеет класс error и по умолчанию скрыто. Я хочу использовать show () jQuery, чтобы показать его, когда учетные данные неверны.

Моя форма содержит два текстовых поля: одно для адреса электронной почты, другое для пароля и кнопку отправки. Однако я никогда не работал с Ajax, за исключением ОЧЕНЬ простых вещей, таких как простой загрузчик, поэтому я не уверен, что делать дальше.

    $("#btn_login").click(
    function()  
    {
    // get values
    var email_address = $("#email_address").val(); 
    var password =  $("#password").val();

    // post values? and ajax call?

    //stop submit btn from submitting
    return(false);

    }
);

Полагаю, мне нужно использовать метод jjuery ajax (), поэтому я подумывал проработать этот пример:

$.ajax({
     type: "POST",
     url: "some.php",
     data: "name=John&location=Boston",
     success: function(msg){
        alert( "Data Saved: " + msg );
     }
});

Тем не менее, я не совсем уверен, как получить значения моих постов (эти две переменные) в данных: штука ... Или я должен пойти другим путем? Это похоже на то, что я никогда не забуду, как это сделать, когда узнаю это, поэтому, если кто-то сможет мне помочь, я буду благодарен. Большое спасибо.

Ответы [ 3 ]

7 голосов
/ 03 апреля 2011

Все, что вам нужно сделать, это создать пару ключ / значение со значениями и присвоить ее параметру данных, а jQuery сделает все остальное.

//create a js object with key values for your post data
var postData = {
  'email' : email_address,
  'password' : password
};

$.ajax({
     type: "POST",
     url: "some.php",
     data: postData , //assign the var here 
     success: function(msg){
        alert( "Data Saved: " + msg );
     }
});

Благодаря этому вы сможете получить доступ к данным с помощью Codeigniters input

РЕДАКТИРОВАТЬ

Я настроилпроверить скрипку здесь: http://jsfiddle.net/WVpwy/2/

$('#dostuff').click(function(){
    var email_address = $("#email_address").val(); 
    var password =  $("#password").val();

    var postData = {
      'email' : email_address,
      'password' : password,
      'html' : 'PASS'
    };

    $.post('/echo/html/', postData, function(data){
        //This should be JSON preferably. but can't get it to work on jsfiddle
        //Depending on what your controller returns you can change the action
        if (data == 'PASS') { 
            alert('login pased');
        } else {
            alert('login failed');
        }
    });
});

Я просто предпочитаю .post, но то, что вы использовали, является эквивалентом.

По сути, ваш контроллер должен выводить данные.Не возвращается.Вам необходимо отправить строковое представление ваших данных обратно, чтобы ваш сценарий мог (оценить, если json) и действовать в соответствии с ним

Вот хороший пример в качестве отправной точки: http://www.ibm.com/developerworks/opensource/library/os-php-jquery-ajax/index.html

4 голосов
/ 05 июня 2013

просто немного измените URL вашего ajax:

$.ajax({
     type: "POST",
     url: "some/myfunction",
     data: "name=John&location=Boston",
     success: function(msg){
        alert( "Data Saved: " + msg );
     }
});

Убедитесь, что ваш URL указывает на функцию, которую вы хотите внутри вашего контроллера. Например: «myfunction» внутри контроллера some (в файле Some.php)

Чтобы получить доступ к вашим пост-переменным внутри функции контроллера, не пытайтесь выставить параметры в myfunction, но:

class Some extends CI_Controller 
{
        ......

public function myfunction()
{
    $name = $this->input->post('name');
    $location = $this->input->post('location');
}
       ......
}
1 голос
/ 03 апреля 2011

Вы определенно можете использовать свой метод, но сокращенный метод таков:

$.post("some.php",{name:"John",location:"Boston",email:email_address,password:password},function(data,textStatus) { //response from some.php is now contained in data });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...