Не удается получить доступ к моим значениям Post, отправленным с помощью jQuery ajax

#jquery #ajax #codeigniter #post

#jquery #ajax #codeigniter #Публикация

Вопрос:

РЕДАКТИРОВАТЬ: удаление ‘index.php ‘ с помощью .htaccess создается эта проблема, которую я только что обнаружил. Теперь я приступаю к ее решению.

РЕДАКТИРОВАТЬ: Проблема решена. Javascript был неправильным: url: "/login/" Для этого потребовалась косая черта в конце.

ОРИГИНАЛ: в моем домашнем представлении я создал форму:

 <div id="login"><?php 
echo form_open('login');
echo form_input('username', 'Username', 'id="username"');
echo form_submit('submit', 'Login', 'id="login_submit"');
echo form_close();
?></div>
  

С помощью некоторого базового javascript (благодаря Nettuts) Я попытался реализовать некоторые ajax:

 $('#login_submit').click(function() {

var form_data = {
    username: $('#username').val(),
    password: $('#password').val()      
};

$.ajax({
    url: "/login",
    type: 'POST',
    data: form_data,
    success: function(msg) {
        $('#login').html(msg);
    }
});

return false;
});
  

Как вы можете видеть, он отправляет значения формы контроллеру входа в систему.

 class Login extends CI_Controller {

function index()
{
    if($this->input->is_ajax_request())
    {
        echo '<h2>Login succeeded with ajax</h2>';
    }
    else
    {
        echo '<p>But your ajax failed miserably</p>';
    }
}

}
  

Проблема в том, что это не работает. Функция $this->input->is_ajax_request() выдает значение FALSE. Игнорируя это, все остальные данные post отсутствуют. Ничего не передается.

Что я делаю не так?

Комментарии:

1. Ваш обработчик кликов jQuery $(document).ready(... завернут?

Ответ №1:

Я думаю, ваша проблема может заключаться в том, что вы на самом деле отправляете не в правильный скрипт. Ваш URL / логин не выглядит так, как будто он попадет на URL Codeigniter (http://domain.com/index.php/login или http://domain.com/my_app/index.php/login ).

Попробуйте изменить URL либо на полное местоположение URL контроллера, либо на правильный абсолютный путь. Либо:

 url: "http://yourdomain.com/index.php/login",
  

или

 url: "/my_app/index.php/login",
  

Если вы не переписали URL-адреса, то / login, вероятно, не свяжется с правильным скриптом.

Комментарии:

1. Я немного отредактировал код. Скрипт действительно работает, и вызывается контроллер с его методом index (). Повторение чего-либо фактически заменяет div его содержимым. Это данные post, которые не проходят. : (

2. Можете ли вы console.log () form_data перед отправкой и убедиться, что данные соответствуют вашим ожиданиям? Также убедитесь, что вы упаковываете jQuery в $ (document). готово (функция () { //jQuery} в противном случае jQuery не сможет правильно получить значение полей ввода.

3. Я добавил функцию подготовки документа. Firebug сообщает: Object {username= «Имя пользователя», password = «Пароль»} Кажется, что данные post установлены правильно.

4. Удаление ‘index.php ‘ с помощью .htaccess создается эта проблема, которую я только что обнаружил. Теперь я приступаю к ее решению.

5. Похоже, вы были правы в первую очередь. URL был немного неправильным. Для этого потребовалась косая черта в конце. Спасибо за помощь!

Ответ №2:

Это направило меня в правильном направлении, когда я использовал PHP и Jquery AJAX для отправки значений post. Я использую .htaccess для перезаписи URL, чтобы удалить расширение .php. Значения Post не были переданы на мой sendmail.php файл. Я решил это, изменив URL запроса post с

 $.ajax({
                            url:'sendemail.php',
                            method:'post',
                            data:{
                                fname:fname,
                            },
                            success:function (e) {
                                alert(e);
                            }
                        });
  

Для

 url:'/sendmail'