#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'