Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ajax+jquery, ajax срабатывает позже предполагаемого 
:(
    Опции темы
yalo
Дата 22.11.2009, 10:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 210
Регистрация: 24.5.2006

Репутация: 2
Всего: 2



здравствуйте.
У меня такая проблема возникла, вроде бы научилась применять связку jquery+ajax, но ajax-запрос выполняется позже, чем следует по замыслу сценария, не могу понять, в чем еще не разобралась, задачу сузила чисто до данной проблемы, лишнего в скрипте ниже ничего нет:
Код

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>
  <title>JQuery + Ajax</title>
  <link type="text/css" href="../css/jquery-ui-1.7.2.custom.css" rel="stylesheet" />
        <script type="text/javascript" src="jquery-1.3.2.min.js"></script>
        <script type="text/javascript" src="jquery-ui-1.7.2.custom.min.js"></script>
  <script type="text/javascript">
    $(function() {
        $("#dialog").dialog({
            bgiframe: true,
            autoOpen: false,
            height: 500,
            width: 550,
            modal: true,
            buttons: {
                'Отмена': function() {
                    $(this).dialog('close');
                },
                'Создать пользователя': function() {
                        $.ajax({
                            type: "POST",
                            url: "/js/if_user_exist.php",
                            data: "username="+$("#username").val(),
                            success: function(msg){
                              if (msg == 1)  {
                                  alert("Пользователь с таким логином уже зарегистирован на сайте! Придумайте другой логин!");
                              }
                              else {
                                  alert("Хороший логин!");
                              }
                            },
                            dataType: 'text'});
                         alert('должно быть после');
                 }
            },
        });
    });
  </script>
  <style type="text/css">
        body { font-size: 62.5%; }
        label, input { display:block; }
        input.text { margin-bottom:12px; width:95%; padding: .4em; }
        fieldset { padding:0; border:0; margin-top:25px; }
        h1 { font-size: 1.2em; margin: .6em 0; }
        div#users-contain {  width: 350px; margin: 20px 0; }
        div#users-contain table { margin: 1em 0; border-collapse: collapse; width: 100%; }
        div#users-contain table td, div#users-contain table th { border: 1px solid #eee; padding: .6em 10px; text-align: left; }
        .ui-button { outline: 0; margin:0; padding: .4em 1em .5em; text-decoration:none;  !important; cursor:pointer; position: relative; text-align: center; }
        .ui-dialog .ui-state-highlight, .ui-dialog .ui-state-error { padding: .3em;  }
    </style>
</head>
<body>
     <button onclick="$('#dialog').dialog('open')">JQuery + Ajax</button>
    <div id="dialog" title="JQuery + Ajax" >
     <form>
         <fieldset id="asdf">
                <input type="text" name="username" id="username" value="" />
         </fieldset>
     </form>
    </div>
</body>

</html>


и на всякий случай сам код php:
Код

<?php

include_once(getenv(DOCUMENT_ROOT)."com_funcs.php");
include_once(getenv(DOCUMENT_ROOT)."sql_connect.php");

header("Content-type: text/html; charset=windows-1251");

$user = row_sql('select count(`id`) as `count` from `users` where `username`='.sql_quote($_POST['username']));
echo (int)$user[0]['count'];
?>


предупреждение alert('должно быть после'); выскакивает при любых раскладах самым первым smile 
причем последующие 'Хороший логин!' и 'Пользователь с таким логином уже зарегистирован на сайте! Придумайте другой логин!' тоже срабатывают и корректным образом в зависимости от введенного логина в поле, следовательно аякс запрос срабатывает, обрабатывается и корректным образом возвращается, но что ж так запоздало-то??

Это сообщение отредактировал(а) yalo - 22.11.2009, 10:08
PM MAIL ICQ   Вверх
yalo
Дата 22.11.2009, 22:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 210
Регистрация: 24.5.2006

Репутация: 2
Всего: 2



боюсь, народ испугался такого большого кода, хотя все лишнее убрано, сокращу до самого необходимого минимала еще сильнее, а кто захочет прямо проверить в действии - все что выше, в первом сообщении темы, этого достаточно будет для тестирования+ сама бибилиотека jquery разумеетсяsmile
вот кратче проблема:
Сам jquery
Код

    $(function() {
        $("#dialog").dialog({
            bgiframe: true,
            autoOpen: false,
            height: 500,
            width: 550,
            modal: true,
            buttons: {
                'Отмена': function() {
                    $(this).dialog('close');
                },
                'Создать пользователя': function() {
                        $.ajax({
                            type: "POST",
                            url: "/js/if_user_exist.php",
                            data: "username="+$("#username").val(),
                            success: function(msg){
                              if (msg == 1)  {
                                  alert("Пользователь с таким логином уже зарегистирован на сайте! Придумайте другой логин!");
                              }
                              else {
                                  alert("Хороший логин!");
                              }
                            },
                            dataType: 'text'});
                         alert('должно быть после');
                 }
            },
        });
    });

HTML, место где вызов jquery
Код

...
     <button onclick="$('#dialog').dialog('open')">JQuery + Ajax</button>
    <div id="dialog" title="JQuery + Ajax" >
     <form>
         <fieldset id="asdf">
                <input type="text" name="username" id="username" value="" />
         </fieldset>
     </form>
    </div>
...


PM MAIL ICQ   Вверх
IDVsbruck
Дата 22.11.2009, 23:15 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 778
Регистрация: 12.11.2006

Репутация: 4
Всего: 22



Технологии наращиваем, в космос летаем, а на садовые грабли как наступали, так и наступаем?

AJAX - "Асинхронный ... и т.д." - подготавливаем запрос, подготавливаем слушателя события, отправляем запрос, идем дальше ... И уже спустя время, когда запрос уйдет на сервер, обработается и вернется, мы словим событие прихода ответа и обработаем его в специально указанной функции (обычно называют callback).
Вот и у тебя в коде: подготавливаем запрос - объект-содержимое в dialog, указали callback - анонимная функция, отпраляем запрос - функция dialog() с содержимым, идем дальше - выдаем алерт "должно быть после", ..., ждем результата с сервера и обрабатываем - выдаем алерт "Пользователь ..." или "Хороший логин!". Все работает как и указано.

Если нет хорошего опыта, то перестроиться на событийную модель управления несколько сложновато на первых порах ... пройдет.

Если нужно все-таки очередность сохранять, точнее, подстраиваться под реалии событийноной модели, то каждую ветвь поведения нужно указывать отдельно: что случится при получении одного ответа, указывать в своей ветви, что при другого или прочих - в соответствующих ветвях. Объединить ветви можно только если какой-то код сгруппировать в сотдельной функции и вызывать ее в каждой из ветвей.
PM MAIL   Вверх
yalo
Дата 24.11.2009, 18:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 210
Регистрация: 24.5.2006

Репутация: 2
Всего: 2



Цитата(IDVsbruck @  22.11.2009,  23:15 Найти цитируемый пост)
Технологии наращиваем, в космос летаем, а на садовые грабли как наступали, так и наступаем?


ну а как иначе - без граблей какое учение smile 

суть вроде словила, но не могу понять ваще что-то, как надо переделать код? я поняла, что надо каким-то образом сделать сначала xmlHttp.send(req) (типо того), как делала до этого, не заморачиваясь еще тем как jquery c ajax-ом сотрудничают, а потом ниже описать функцию, которая обрабатывает запрос.. но как бы сказать.. я не могу сообразить или найти в доках как мне изобразить-то команду xmlHttp.send(req).. я поняла что за раз в одном месте описано все: и отправка и обработка и это не правильно, но как сделать правильно я не пойму smile 
PM MAIL ICQ   Вверх
IDVsbruck
Дата 25.11.2009, 03:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 778
Регистрация: 12.11.2006

Репутация: 4
Всего: 22



Код
$(function(){
    $("#dialog").dialog({bgiframe:true, autoOpen:false, height:500, width:550, modal:true, buttons:{
        "Отмена":function(){$(this).dialog('close');},
        "Создать пользователя":function() {
            $.ajax({type:"POST", url:"/js/if_user_exist.php", data:"username=" + $("#username").val(), dataType:"text", success:function(msg){
                if (msg == 1){
                    alert("Пользователь с таким логином уже зарегистирован на сайте! Придумайте другой логин!");
                    nextStep();
                } else {
                    alert("Хороший логин!");
                    nextStep();
                }
            }});
        }
    }});
});
function nextStep(){
    alert("должно быть после");
}

Все предельно просто.
PM MAIL   Вверх
yalo
Дата 25.11.2009, 18:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 210
Регистрация: 24.5.2006

Репутация: 2
Всего: 2



ок, спасибо большое IDVsbruck, разобралась, действительно просто все вышло.. 
но ведь дальше опять-таки препоны smile  никак не хочет дружить у меня связка jquery + ajax, задачу опять же еще больше сужаю, чтоб ничего лишнего
Код

...
        $(function(){
            $("#dialog").dialog({bgiframe:true, autoOpen:false, height:500, width:550, modal:true, buttons:{
                "Отмена":function(){$(this).dialog('close');},
                "Создать пользователя":function() {
                    $.ajax({type:"POST", url:"if_user_exist.php", data:"username=" + $("#username").val(), dataType:"text", success:function(msg){
                        alert(msg);
                         nextStep();
                    }});
                }
            }});
        });
        function nextStep(){
            alert("должно быть после");
        }
...


а ниже код пхп (не писать же мне его в самом деле из-за этого в разделе про пхп)
Код

<?php
header("Content-type: text/html; charset=windows-1251"); 
echo 'привет!!!';
?>


так вот, в итоге алерт мне выдаст не "привет!!!", а вообще весь код пхп-скрипта, а именно "<?php
echo 'привет!!!';
?>",  в поисках причины меняла параметр dataType на html, и на text обратно.. ничто не помогло smile 


Это сообщение отредактировал(а) yalo - 25.11.2009, 18:32
PM MAIL ICQ   Вверх
IDVsbruck
Дата 25.11.2009, 20:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 778
Регистрация: 12.11.2006

Репутация: 4
Всего: 22



Ну, тут я пас ... ПэХаПэ не знаю и знать не хочу smile - это в другой раздел.
PM MAIL   Вверх
brother79
Дата 25.11.2009, 20:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 471
Регистрация: 18.8.2009

Репутация: 1
Всего: 6



Цитата(yalo @  25.11.2009,  18:32 Найти цитируемый пост)
 в поисках причины меняла параметр dataType на html, и на text обратно.. ничто не помогло 


Это не поможет. Раз весь скрипт возвращается, значит у тебя php не отрабатывает. Попробуй в браузере вызвать отдельно свой урл, я подозреваю, что увидишь ту же картинку, вместо сообщения. А исходный файл со скриптом аяксовым видимо работает, потомучто там неду php, только js.

Короче надо рыть в стороны апача, он видимо просто не запущен.


--------------------
PM MAIL WWW   Вверх
yalo
Дата 28.11.2009, 20:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 210
Регистрация: 24.5.2006

Репутация: 2
Всего: 2



Цитата(brother79 @  25.11.2009,  20:41 Найти цитируемый пост)
Раз весь скрипт возвращается, значит у тебя php не отрабатывает. Попробуй в браузере вызвать отдельно свой урл, я подозреваю, что увидишь ту же картинку, вместо сообщения


нет, скрипт обработался, получила НЕ картинку, а результат работы скрипта


Цитата(brother79 @  25.11.2009,  20:41 Найти цитируемый пост)
Короче надо рыть в стороны апача, он видимо просто не запущен.

как это? smile  а как весь остальное-то на сайте крутится тогда? smile

Это сообщение отредактировал(а) yalo - 28.11.2009, 20:09
PM MAIL ICQ   Вверх
brother79
Дата 30.11.2009, 05:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 471
Регистрация: 18.8.2009

Репутация: 1
Всего: 6



Цитата(yalo @  25.11.2009,  18:32 Найти цитируемый пост)
так вот, в итоге алерт мне выдаст не "привет!!!", а вообще весь код пхп-скрипта, а именно "<?php
echo 'привет!!!';
?>",


Цитата(yalo @  28.11.2009,  20:03 Найти цитируемый пост)
нет, скрипт обработался, получила НЕ картинку, а результат работы скрипта



Выражовываюсь я просто так. Не картинку конечно, тот же текст, который написан в исходном скрипте, как и написала в пред. посте. т.е. у тебя апач должен получить пхп скрипт, и выполнить его, и отдать уже рез-тат, а он не выполнен. 
Вар-ты:
1) апач вообще не работает
2) апач работает, но не для этого файла, возможно связанно с расширением или ещё что-то, т.е. он не попадает под те файлы, для которых апач выполняет скрипты.

В любом случае, если апач отработает - то ты никак не увидишь теги пхп.


--------------------
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Применение библиотек | Следующая тема »


 




[ Время генерации скрипта: 0.0935 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.