Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Обработка ответа после POST-запроса (jQuery - Ajax) (https://javascript.ru/forum/jquery/30130-obrabotka-otveta-posle-post-zaprosa-jquery-ajax.html)

battrack 25.07.2012 11:28

Обработка ответа после POST-запроса (jQuery - Ajax)
 
Разбираюсь с ajax-функциями jQuery и возник вот такой вопрос, ответ на который никак найти не могу:
Например, когда мы используем простейшую функцию load, то мы извлекаем файл с сервера и, например, вставляем его содержимое в страницу. $('div:test').load('test.html'); - все ясно нет проблем.
Можно также не всю страницу вставить, а только ее часть по какому-либо селектору, например так: $('div:test').load('test.html .myclass'); - грузим из страницы test.html содержимое контейнера с классом myclass.
Вот мой вопрос и касается такой выборочной загрузки.

Как из ответа получить только нужные элементы при отправке запроса методом POST?
Есть функция: $.post("test.php", { перечисляем параметры}, function(data){ alert (data) }); - посылает post-запрос к test.php, тот в свою очередь делает какие-то операции и посылает ответ. Наша функция принимает ответ в data и выводит в окне alert. Но, например, я не хочу выводить весь data, а только какой-то один контейнер из него, что мне нужно делать?

И правильно ли я понимаю, что при использовании низкоуровневой функции $.ajax это выборка данных из ответа осуществляется путем использования параметра dataFilter?

Deff 25.07.2012 13:53

battrack,
Попробуйте так
function(data){ alert ($(data).find("#MyId")) });

battrack 25.07.2012 15:15

Не получается!

К примеру:
Посылаю запрос:
$.ajax({
type: "POST",
url: "myscript.php",
data: "param1=" + 111 + "&param2=" + 222, // посылаю скрипту какие-то параметры (не важно какие)
dataType: "html",
success: function(data){ alert (data.find("#test1")) } // обрабатываю ответ
});

myscript.php содержит простейший код:
<?php echo("<div id=\"test1\">lalalala</div><div id=\"test2\">tatatata</div>"); ?>

Получается что в data возвращается оба дива и test1 и test2, но мне нужно чтобы в success из data извлекалось содержимое контейнера test1 и вывелось к примеру в alert. Поэтому я делаю запись типа alert (data.find("#test1")) как вы посоветовали, ожидая что из data возъмется содержимое контейнера с id=test1 и в окошке alert я увижу "lalalala". Не получается!

Если например в alert выводить сам data без применения к нему селекторов, то выводится:
<div id="test1">lalalala</div><div id="test2">tatatata</div>

Но вот как вывести только test1 или test2 - хоть убей не понимаю.
Видимо не до конца разобрался с понятиями "селектор", "объект" и т.д.
Т.к. кто-то мне советовал делать так: "data.find(selector)" - но так тоже не работает.

Deff 25.07.2012 15:32

battrack,
Скорее всего в data responseText
Хотя попробуйте иную форму
function(data){ alert ($.data.find("#MyId")) });

Если не проходит - то только временное сохранение в скрытый див и перераспарс в нём, с последущим удалением дива после извлечения

SkyLight 27.07.2012 15:02

Цитата:

Сообщение от battrack
success: function(data){ alert (data.find("#test1")) } // обрабатываю ответ

Вы пишете просто data, который в данном случае является строкой, а метод find есть у объекта jQuery, так что вам надо ваш data в этом месте обернуть в $(....), как в примере от Deff.

imsha 29.07.2012 15:50

$.ajax({
    url: 'test.php',
    success: function(result){
        //result == какой-то html 
        var data = $(result).filter('.класс элемента который хочешь выдернуть');
        $('#id').append(data);
    }
})

Deff 29.07.2012 16:06

var data = $(result).find('.класс элемента который хочешь выдернуть');


Часовой пояс GMT +3, время: 03:47.