Форум программистов, компьютерный форум, киберфорум
JavaScript
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
10 / 10 / 1
Регистрация: 25.10.2012
Сообщений: 364

[РЕШЕНИЕ] Функция асинхронной отправки $.ajax

05.09.2015, 01:31. Показов 1078. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Собственно хотел поделиться своим решением. У многих возникал вопрос как же сделать такую функцию которая будет асинхронно отправлять данные на сервер, после чего она будет возвращать полученные данные. А функция нужна, чтобы несколько раз не писать вот этот кусок кода:

JavaScript
1
2
3
4
5
6
7
8
9
$.ajax({
    type: 'POST',
    url: 'handler.php',
    data: '',
    cache: false,
    success: function(response){
        // Ваш код
    }
});
Ответа на вопрос в интернете я не нашел, поэтому пришлось придумывать самому.

РЕШЕНИЕ:

Создаем наш единый обработчик
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
function sender(func)
{
    $.ajax({
        type: 'POST',
        url: 'tets.txt',
        data: params,
        cache: false,
        success: function(response){
            func(response);
        }
    });
}

А теперь как с ним работать:

JavaScript
1
2
3
4
5
6
params = 'var=value&var2=value2'; // наши данные для отправки
 
sender( function(getResp){ 
    // здесь мы пишем наш код, который будет выполняться в случае успеха
    alert(getResp); // например показать полученные данные
}, params);
Т.е. что мы делаем: мы не ждем пока мы получим данные, так как это не возможно. Их возможно получить только лишь остановив страницу, для этого можно отключить асинхронную передачу данных (async: false), но это не то что нам нужно... Мы просто отправляем в "success" нашу функцию, которая будет работать после успешного принятия данных. Думаю принцип понятен. Скрипт можно доработать на выполнение при ошибке, но думаю дальше сами разберетесь. Если же нет, пишите помогу.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
05.09.2015, 01:31
Ответы с готовыми решениями:

Возможно ли упростить код для асинхронной отправки электронной почты
Пишу консольное приложение для отправки писем. За раз отправляется около 100 писем с отчетами. Вроде всё работает, но вот код.... мягко...

Приоритет отправки форм ajax
Здравствуйте, добрые люди! Такая проблема: есть готовый рабочий скрипт отправки данных на мыло с помощью ajax... он работает стабильно...

Не работает форма отправки ajax
Всем привет! У меня появилась проблема, которую не могу сам решить, хотя она вроде бы и простая. Решение скорее всего на поверхности, но...

14
05.09.2015, 01:55

Не по теме:

Цитата Сообщение от Joker555 Посмотреть сообщение
Ответа на вопрос в интернете я не нашел, поэтому пришлось придумывать самому.
Откройте для себя Обещания (Promise), а кроме того, в jQuery существует объект Deferred со своими методами, как, например, метод $.when(). Примеры использования, так же можно найти или в этой статье.
Хотя, изобретение колеса - это неплохая тренировка лично для вас :)

0
10 / 10 / 1
Регистрация: 25.10.2012
Сообщений: 364
05.09.2015, 02:24  [ТС]
Lazy_Den, спасибо. Вот не могу успокоиться, сколько не программирую постоянно узнаю что-то новое. Я об этом даже не слышал.

Добавлено через 2 минуты
Цитата Сообщение от Lazy_Den Посмотреть сообщение
Хотя, изобретение колеса - это неплохая тренировка лично для вас
я просто привык на нативном писать, не люблю использовать фремворки. Использую только jQuery для JS, так как считаю глупым не использовать его. Он намного упрощает работу. Но на PHP принципиально не использую фремворки, это к тому же и снижение производительности. А JS работает на стороне клиента, поэтому тут можно не париться. Однажды меня рассмешил один тип написав: я не использую jQuery, потому-что ее испортили, она стала слишком нагруженной... очень глупый человек.
0
Ренегат
Эксперт HTML/CSS
 Аватар для BANO
1740 / 1085 / 386
Регистрация: 06.08.2014
Сообщений: 5,203
Записей в блоге: 1
05.09.2015, 10:42

Не по теме:

Joker555, это вы про меня?



Добавлено через 7 минут
Joker555, могу предложить вам свою реализацию на нативном js
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
function ajax(a) {
            return new Promise(function (done, error) {
                var x;
                if (window.XMLHttpRequest) {
                    x = new XMLHttpRequest;
                    x.overrideMimeType && x.overrideMimeType("text/xml")
                } else if (window.ActiveXObject)try {
                    x = new ActiveXObject("Msxml2.XMLHTTP")
                } catch (d) {
                    try {
                        x = new ActiveXObject("Microsoft.XMLHTTP")
                    } catch (e) {
                    }
                }
                if (!x) {
                    error("not supported")
                }
                x.onreadystatechange = function () {
                    if (this.readyState == 4 && this.status == 200)
                        done(a.xml ? this.responseXML : this.responseText);
                    else error()
                };
                if (typeof a.data == "object") {
                    var d = [];
                    for (var i in a.data)
                        d.push(encodeURIComponent(i) + "=" + encodeURIComponent(a.data[i]))
                    a.data = d.join("&").replace(/%20/g, "+")
                }
                x.open((a.type || "post").toUpperCase(), a.url, true);
                x.send(a.data);
            });
        }
пользоваться почти как на jquery, только по-нормальному
JavaScript
1
2
3
4
5
6
7
8
9
10
11
ajax({
    url:"tester.php",
    data:{
        param:"sss"
    }
    /*коли мы получаем xml, то можно поставить флаг xml*/
}).then(function(data){
    // получили ответ
}).catch(function(e){
    // ошибка
})
0
10 / 10 / 1
Регистрация: 25.10.2012
Сообщений: 364
06.09.2015, 00:44  [ТС]
BANO, спасибо, но я как за то, чтобы использовать jQuery для этого, так как он точно кросбраузерный и обкатанный. Точно будет работать на всех браузерах.
0
Ренегат
Эксперт HTML/CSS
 Аватар для BANO
1740 / 1085 / 386
Регистрация: 06.08.2014
Сообщений: 5,203
Записей в блоге: 1
06.09.2015, 14:01
Joker555, а я за то, чтобы выдирать из этой квери нужные для проекта методы
а не грузить ещё 100500 методов, которые я точно использовать не буду

А ещё лучше собственую библиотеку

А кстати querySelector работает не во всех браузерах, далеко
0
06.09.2015, 14:07

Не по теме:

Цитата Сообщение от BANO Посмотреть сообщение
далеко
Так ли уж далеко?

0
Ренегат
Эксперт HTML/CSS
 Аватар для BANO
1740 / 1085 / 386
Регистрация: 06.08.2014
Сообщений: 5,203
Записей в блоге: 1
06.09.2015, 14:14
Lazy_Den, для мкня использовать обёртку какой-то встроенной функции - 3 шага назад в развитии

п с
согласен лоханулся с поддериваемостью
0
 Аватар для Lazy_Den
3325 / 2845 / 1423
Регистрация: 15.01.2014
Сообщений: 6,170
06.09.2015, 14:37
Цитата Сообщение от BANO Посмотреть сообщение
для мкня использовать обёртку какой-то встроенной функции - 3 шага назад в развитии
Дело вкуса. Хотя разработчики, скорее всего, расстроились бы, т.к. они считали эти методы шагом вперед и W3C рекомендует, а оказалось наоборот. Ну, дурачьё они... что еще сказать
Кстати, никак не могу понять, при чем тут querySelector, если в обсуждении этой темы, это нигде не упоминалось.
0
Ренегат
Эксперт HTML/CSS
 Аватар для BANO
1740 / 1085 / 386
Регистрация: 06.08.2014
Сообщений: 5,203
Записей в блоге: 1
06.09.2015, 14:50
Lazy_Den, квери селектор это метод который вообще-то был и остаётся основой библиотеки

Добавлено через 1 минуту
Lazy_Den, а когда w3с рекомендовал?
0
 Аватар для Lazy_Den
3325 / 2845 / 1423
Регистрация: 15.01.2014
Сообщений: 6,170
06.09.2015, 14:53
Цитата Сообщение от BANO Посмотреть сообщение
а когда w3с рекомендовал?
W3C Recommendation 21 February 2013, но вроде бы первые рекомендации были еще в 2009 году.
0
Ренегат
Эксперт HTML/CSS
 Аватар для BANO
1740 / 1085 / 386
Регистрация: 06.08.2014
Сообщений: 5,203
Записей в блоге: 1
06.09.2015, 15:03
А как рекомендации по квери сеоектору относятся к жквери?

Добавлено через 1 минуту
А модет я что-то там не так прочитал
0
 Аватар для Lazy_Den
3325 / 2845 / 1423
Регистрация: 15.01.2014
Сообщений: 6,170
06.09.2015, 15:10
BANO, что-то вы меня запутали. Изначально у вас и Joker555 возникла дискуссия по поводу jQuery. В последнем ответе ему, вы написали:
Цитата Сообщение от BANO Посмотреть сообщение
А кстати querySelector работает не во всех браузерах, далеко
. Такого метода jQuery не существует (хоть и используется внутри самой библиотеки), поэтому я и удивился:
Цитата Сообщение от Lazy_Den Посмотреть сообщение
никак не могу понять, при чем тут querySelector...
И вот ваш последний вопрос, меня поставил в тупик, т.к. я предполагал, что мы обсуждали не jQuery, а метод querySelector.
0
10 / 10 / 1
Регистрация: 25.10.2012
Сообщений: 364
06.09.2015, 15:12  [ТС]
Я кстати тоже ничего не понял, о чем пошла речь Кстати а мой метод очень удобен, пока еще не столкнулся с проблемами.
0
Ренегат
Эксперт HTML/CSS
 Аватар для BANO
1740 / 1085 / 386
Регистрация: 06.08.2014
Сообщений: 5,203
Записей в блоге: 1
07.09.2015, 00:23
Joker555, ваш метод очень удобен по тому, что все его используют, только все его используют по нормальному, а не пишут для этого отдельную функцию

Lazy_Den, у jq есть метод find

ps
я не говорил что я иногда могу несознательно мозги, ... мыть?

Добавлено через 1 минуту
Joker555, кстати "данные для отправки" можно и объектом передавать, jq сама их переведёт в нормальный вид
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.09.2015, 00:23
Помогаю со студенческими работами здесь

Ajax редерект после отправки
Привет есть такое код jQuery(document).ready(function($){ $('#mymial').submit(function(){ $.ajax({ type:...

Код обработчика для ajax отправки
Помогите разобраться, есть код, который отправляет данные в обработчик. Но самого обработчика нет (удалили). $.ajax({ ...

Изменить скрипт ajax отправки формы
Здравствуйте. Сразу к проблеме: есть веб страница, на которой 3 формы отправки контактов (со своими обработчиками) и много ссылок...

Реализация отправки запросов к БД через AJAX
Подскажи пожалуйста как сделать оправку данных из формы через ajax, чтоб не перезагружалась страница. Есть вот: <html> ...

Скачивание файла после отправки AJAX
Файл видимо в бинарном виде передается обратно в в ajax. Подскажите как мне все таки добиться скачивания? test.php <?php ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru