Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Применение библиотек > Ajax + jquery..не получается


Автор: EmilRegis 13.11.2009, 10:14
Добрый день...Прикрутил к своему проектику jquery и раз уж так случилось, решил укоротить код и переписать ajax-запрос под jquery...
Вот так выглядит мой старый код и всё работает
Код

function changelogin(login){
    if(login.length == 4)
        get_ajax_info('/WebData/pb.wb_pict_updownload.get_imgpath?username_=' + login);
}

function get_ajax_info(url_){
    var res_data;
    if (window.XMLHttpRequest) {
        var req = new XMLHttpRequest();
    }
    else if (window.ActiveXObject) {    
        var req = new ActiveXObject("msxml2.XMLHTTP");
    } 
    if (req) {
        req.onreadystatechange = function proc_req() {    
            var ready = req.readyState;
            if (ready == 4) {
                res_data = ""+req.responseText;   
                req = null;
                onAjaxSuccess(res_data);
            } 
            
        }
        req.open("get", url_, true);
        req.send(null);
    }             
return false          
}

function onAjaxSuccess(res_data){
...
}


а вот так выглядит код переписанный под jquery
Код

function changelogin(login){
    if(login.length == 4){
              $.post(
            '/WebData/pb.wb_pict_updownload.get_imgpath',
            {username: login},
            onAjaxSuccess
           );
    }    
}
function onAjaxSuccess(res_data){
...
}

и он не работает...При этом я могу видеть, что при нужном мне событии данные куда-то улетают))то есть идёт соединение, но на этом всё...Возможно в этом случае у меня адрес неправильно прописан?

Автор: IDVsbruck 13.11.2009, 14:03
Возможно, и адрес. А на сервере нет возможности посмотреть, выполняется ли код/скрипт?
Плюс, если на сервере не менялось, то там обработка может стоять GET-протокола, а тут POST.

Советую использовать $.ajax() - там есть обработчик как success, так и error - при отладке значительно удобнее.

Автор: Любитель 13.11.2009, 22:48
Как минимум, в одном случае у вас гет, в другом пост. И с разным именем параметра. Вы уверены, что на сервере они одинаково обрабатываются?!

Автор: EmilRegis 14.11.2009, 12:08
да уверен...дело в том, что я отчаявшись пробовал и с гетом и с постом)) и ни то, ни другое не работало...
Серверный код, так уж сложилось, написан на pl/sql, которому помоему вообще не важно гетом или постом ему данные приходят...
действительно наверное посмотрю $.ajax()

Добавлено через 59 секунд
Цитата(Любитель @  13.11.2009,  22:48 Найти цитируемый пост)
И с разным именем параметра
 а вот это не очень понял...где там разное имя параметра? в обоих случаях имя username

Добавлено через 2 минуты и 3 секунды
ёмаё...я ж чёрточку пропустил

Автор: Любитель 14.11.2009, 12:15
С "чёрточкой" работает? smile

Автор: EmilRegis 14.11.2009, 12:16
всё, теперь заработало...просто надо было имя параметра написать username_, а я написал username

Автор: yalo 22.11.2009, 08:23
читала тему чтобы самой научиться быстро аякс подключать через jquery, вроде все понятно, но не понятен один момент (конкретно на данном примере): каким образом при переписывании яакса под джквери мы в функцию onAjaxSuccess передаем непосредственно то, что допереписывания называлось res_data = ""+req.responseText;
Ничего не пропущено в месте
Код

$.post(
            '/WebData/pb.wb_pict_updownload.get_imgpath',
            {username: login},
            onAjaxSuccess
           );


и если не пропущено, то каким волшебным образом дальнейшая функция
Код

function onAjaxSuccess(res_data){
...
}


знает, что принимаемый в нее параметр res_data - это тот самый req.responseText?

Автор: Любитель 22.11.2009, 12:39
jQuery умеет обрабатывать респонс., выдёргивая данные. Причём различным образом для разных типов данных (для get/post по дефолту - html).

Автор: yalo 22.11.2009, 19:19
Цитата(Любитель @  22.11.2009,  12:39 Найти цитируемый пост)
jQuery умеет обрабатывать респонс., выдёргивая данные. Причём различным образом для разных типов данных (для get/post по дефолту - html)


что-то так и не поняла ответа на свой вопрос.. я догадываюсь, что jQuery должен уметь обрабатывать респонс, иначе бы он был бы ущемленной библиотекой по части ajax, что не рационально при наличии прочих таких замечательных способностей, но где тут ответ на то, что я спросила?..

Автор: Любитель 22.11.2009, 20:32
Этот колбек вызывает jQuery, данные берутся (в текущей версии) через jQuery.httpData. В чём вопрос-то, я не пойму тогда? smile

Автор: yalo 22.11.2009, 21:52
Цитата(Любитель @  22.11.2009,  20:32 Найти цитируемый пост)
 чём вопрос-то, я не пойму тогда? 

ну вот смотрите, Любитель, smile раньше были такие строчки (до переписывания)
Код

                res_data = ""+req.responseText;   
                req = null;
                onAjaxSuccess(res_data);

ну и ниже описание этой функции onAjaxSuccess, потом переписали и получили:
Код

function changelogin(login){
    if(login.length == 4){
              $.post(
            '/WebData/pb.wb_pict_updownload.get_imgpath',
            {username: login},
            onAjaxSuccess
           );
    }    
}
function onAjaxSuccess(res_data){
...
}

и вроде как после переписывания функция onAjaxSuccess в ее определении тоже принимает параметр, но где видно в коде $.post( ... ), что этим параметром у onAjaxSuccess будет ответ респонз? или в этой обертке post (так кажется называется?..) третий параметр - функция всегда принимает входящим параметром респонз? без вариантов то есть?..

Автор: Любитель 22.11.2009, 22:45
Ну так вы доках по jQuery же всё написано! По сути, в данном случае можно смотреть доку по jQuery.ajax (почти цитирую):

success (как раз этот колбек) - A function to be called if the request succeeds. The function gets passed two arguments: The data returned from the server, formatted according to the 'dataType' parameter, and a string describing the status.
...
jQuery will intelligently pass either responseXML or responseText to your success callback

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)