Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: jQuery Ajax проблемка

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: help with jQuery
zercs
Отправлено: 24 Апреля, 2011 - 20:22:40
Post Id


Новичок


Покинул форум
Сообщений всего: 11
Дата рег-ции: Янв. 2011  


Помог: 0 раз(а)




Привет всем! Изучаю jQuery. Написал объект LOGIN, в методе load() есть ajax-запрос (post). Дело в том, что страница обновляется, как будто запрос синхронный. Сервер ничего не возвращает. Подскажите, пожалуйста, в чем суть проблемы. Спасибо!

Замечания:
1. Код на сервере верный, проверял низкоуровневыми запросами.
2. Firebug показывает, что данные из js скрипта отправляются корректно, но ответа от сервера нет.

CODE (javascript):
скопировать код в буфер обмена
  1.  var LOGIN = {
  2.         running: false,
  3.         container: "#log_comments",
  4.         url: "scripts/log_add.php",
  5.         delay: 1000,
  6.         attempts: 3,
  7.         reset: function() {
  8.             this.delay = 1000;
  9.             this.attempts = 3;
  10.         },
  11.         load: function() {
  12.            //снижаем нагрузку
  13.            if(this.running == true) {
  14.                return;
  15.            }
  16.            this.running = true;
  17.  
  18.            var _login = this;
  19.  
  20.             $.ajaxSetup({
  21.                 timeout: 15000
  22.             });
  23.             //запрос
  24.             $.ajax({
  25.                 type: "POST",
  26.                 url: this.url,
  27.                 data: $("#login_form").serialize(),
  28.                 //прелоадер
  29.                 beforeSend: function() {
  30.                 $(_login.container).show().html("<img src='images/preloader.gif' alt=''>");
  31.                 },
  32.                 //ошибка
  33.                 error: function(xhr,status) {
  34.                     if(_login.attempts-- == 0) {
  35.                         _login.reset();
  36.                         return;
  37.                     }
  38.                     setTimeout(function() {_login.load();}, _login.delay *= 2);
  39.                 },
  40.                 //успех
  41.                 success:  function(data) {
  42.                     _login.display(data);
  43.                 },
  44.                 //завершение
  45.                 complete: function() {
  46.                     _login.running = false;
  47.                 }
  48.             });
  49.         },
  50.         //отображение
  51.         display : function(data) {
  52.            var log_div = $("#log_comments");
  53.            log_div.hide();
  54.  
  55.             if (response == 1) {
  56.                 log_div.html("<font color='#e80707' style='background-color: #FFE4E1;\
  57.                font-size: 12px; border: 1px dashed #e80707;'>\
  58.                &nbsp;Неправильный логин/пароль&nbsp;</font>").fadeIn('normal');
  59.                  setTimeout(function() {log_div.fadeOut('normal')},4000);
  60.                 }
  61.         }
  62.     };


На всякий случай серверный скрипт:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. require_once 'config.php';        // коннект
  3. $link = @mysql_connect($config['mysql_host'].":".$config['mysql_port'], $config['mysql_login'], $config['mysql_password']) or die ($server['errorText']);
  4. @mysql_select_db($config['mysql_db'], $link) or die ('Найти базу с таким именем не удалось!');
  5. Header("Content-Type: text/javascript; charset=windows-1251");
  6. mysql_query ("set character_set_client='cp1251'");
  7. mysql_query ("set character_set_results='cp1251'");
  8. mysql_query ("set collation_connection='cp1251_general_ci'");
  9.  
  10. $login_temp = mysql_real_escape_string($_POST['log_login']);    //преобразование данных
  11. $login = htmlspecialchars($login_temp,ENT_QUOTES);
  12. $pass_temp = mysql_real_escape_string($_POST['log_pass']);
  13. $pass = htmlspecialchars($pass_temp,ENT_QUOTES);
  14. $pass_code = base64_encode($pass);
  15.  
  16. $account = mysql_query("SELECT * FROM `users` WHERE `Username` = '$login' ",$link); //непосредственно логин
  17. $row = mysql_fetch_array($account);
  18.  
  19. if($row && $row['Password'] == $pass_code && $row['Username'] == $login && ereg("^([a-zA-Z0-9_-])*$",$login)) {
  20.   $_SESSION['lettbox_log'] = $login;
  21.   echo $login.":".$row['Sent_messages'].":".$row['Received_messages'].":".$row['Points'];
  22.   mysql_close($link);
  23.   exit();
  24.   }
  25.   else {
  26.         echo "1"; mysql_close($link); exit();
  27.         }
  28. ?>
 
 Top
SAD
Отправлено: 24 Апреля, 2011 - 20:34:55
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2508
Дата рег-ции: Май 2009  
Откуда: Днепропетровск, Украина


Помог: 75 раз(а)




жесть
возможно. при обращении к обработчику в нем самом возникает ошибка.
 
 Top
Viper
Отправлено: 25 Апреля, 2011 - 01:28:22
Post Id



Активный участник


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


Помог: 98 раз(а)




емае... бедные индусы...

zercs пишет:
но ответа от сервера нет.
что это значит в вашем понимании?
В моем понимании это либо 503 или 504 или 404 ошибки.
В php-скрипте втулите в начале какой-нибудь print или echo для теста. Если в firebug будет пусто значит ваш суперметод LOGIN пустил корни зла Ниндзя


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
zercs
Отправлено: 25 Апреля, 2011 - 10:18:11
Post Id


Новичок


Покинул форум
Сообщений всего: 11
Дата рег-ции: Янв. 2011  


Помог: 0 раз(а)




А в чем проблема моего объекта? Улыбка Многовато методов?

Дело в том, что данные отсылаются вообще синхронно, т.е. страница обновляется, не пойму почему. Поставил в скрипте echo 1, ничего не возвращает.

P.S. Подобный объект с коллбеком от ошибок работает исправно, только для "GET".

Проблема решена. URL из объекта шел неправильно.
Остается актуальным вопрос об объекте Улыбка Почему же он "жесть")

(Отредактировано автором: 25 Апреля, 2011 - 10:22:46)

 
 Top
SAD
Отправлено: 25 Апреля, 2011 - 10:52:11
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2508
Дата рег-ции: Май 2009  
Откуда: Днепропетровск, Украина


Помог: 75 раз(а)




zercs пишет:
Остается актуальным вопрос об объекте Улыбка Почему же он "жесть")

Вы сделали это через одно место, хотя можно сделать лучше.
 
 Top
zercs
Отправлено: 25 Апреля, 2011 - 11:09:27
Post Id


Новичок


Покинул форум
Сообщений всего: 11
Дата рег-ции: Янв. 2011  


Помог: 0 раз(а)




Ну так я потому и написал, что только изучаю jQuery) Вот бы увидеть нормальный работающий post-запрос с callback'oм... Был бы очень благодарен!

(Отредактировано автором: 25 Апреля, 2011 - 11:09:38)

 
 Top
Viper
Отправлено: 25 Апреля, 2011 - 11:32:13
Post Id



Активный участник


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


Помог: 98 раз(а)




zercs что на него смотреть то? callback функция после передачи параметров.


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
zercs
Отправлено: 25 Апреля, 2011 - 12:22:24
Post Id


Новичок


Покинул форум
Сообщений всего: 11
Дата рег-ции: Янв. 2011  


Помог: 0 раз(а)




Ну хотя бы вот такую функцию если сделать, все равно почему-то не корректно работает.
Вроде почти 1 в 1 как в книжке, по которой изучаю, и тем не менее..
GET-запрос работает, а POST- нифига.

CODE (javascript):
скопировать код в буфер обмена
  1. function aj_log() {
  2.     var form_data = $('#login_form').serialize();
  3.     var log_div = $('#log_comments');
  4.     //запрос
  5.     $.ajax({
  6.         type: 'POST',
  7.         url: 'scripts/log_add.php',
  8.         data: form_data,
  9.         //прелоадер
  10.         beforeSend: function() {
  11.         log_div.show().html("<img src='images/preloader.gif' alt=''>");
  12.         },
  13.         //ошибка
  14.         error: function() {
  15.             log_div.text("Неудачно. Попробуйте еще раз.");
  16.             },
  17.         //успех
  18.         success: function(response) {
  19.             log_div.hide();
  20.  
  21.             if (response == 1) {
  22.                 log_div.html("<font color='#e80707' style='background-color: #FFE4E1;\
  23.                font-size: 12px; border: 1px dashed #e80707;'>\
  24.                &nbsp;Неправильный логин/пароль&nbsp;</font>").fadeIn('normal');
  25.                 setTimeout(function() {log_div.fadeOut('normal')},4000);
  26.                 }
  27.          }
  28.      });
  29. }


Идет по ветке error и обновляет страницу.

P.S. Решил проблему до конца. Оказалось, что отсутствовал return false в вызове.

(Отредактировано автором: 25 Апреля, 2011 - 12:40:12)

 
 Top
Viper
Отправлено: 25 Апреля, 2011 - 18:29:30
Post Id



Активный участник


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


Помог: 98 раз(а)




zercs выкинте ту книжку по которой такое учат писать. Есть api в конце-то концов. Да и базовых знаний javascript вам вполне хватит.


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
SAD
Отправлено: 25 Апреля, 2011 - 19:39:31
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2508
Дата рег-ции: Май 2009  
Откуда: Днепропетровск, Украина


Помог: 75 раз(а)




книги зло.
 
 Top
Haron
Отправлено: 26 Апреля, 2011 - 10:41:11
Post Id



Частый гость


Покинул форум
Сообщений всего: 197
Дата рег-ции: Июнь 2010  
Откуда: Оттуда


Помог: 5 раз(а)




Коль уж речь зашла про ajax и jQuery - то вот так - гораздо проще:

CODE (javascript):
скопировать код в буфер обмена
  1.  
  2. function request(form_id) {
  3. var request_data = $(form_id).serialize();
  4. // здесь делаем что-либо перед запросом
  5. $.post("ajax.php",request_data, // А вот и запрос
  6. function gotResponceFunction(data) {
  7.      // Разбираем ответ
  8. });}


А саму request() - вешаем на ивент.

(Отредактировано автором: 26 Апреля, 2011 - 10:58:30)



-----
И чё?
 
 Top
SAD
Отправлено: 26 Апреля, 2011 - 10:54:22
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2508
Дата рег-ции: Май 2009  
Откуда: Днепропетровск, Украина


Помог: 75 раз(а)




полностью поддерживаю, проще и не придумаешь)
 
 Top
Haron
Отправлено: 26 Апреля, 2011 - 11:01:44
Post Id



Частый гость


Покинул форум
Сообщений всего: 197
Дата рег-ции: Июнь 2010  
Откуда: Оттуда


Помог: 5 раз(а)




Подправил: - сделал ещё проще и универсальней. Теперь можно любую форму обрабатывать.


-----
И чё?
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« JavaScript & VBScript »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB