Map
Форумы / Вопросы по IT / Jwt JavaScript / 25 сообщений из 77, страница 3 из 4
07.04.2021, 08:20
    #2922969
WildMage
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Jwt JavaScript
Дет, а какого фига оно может не аппендить?
Код: JavaScript
1.
2.
3.
4.
5.
6.
7.
8.
        let a = function (page, text)
        {
            return "<a href=\"javascript:app.page("+page +")\">"+text+"</a>";
        }
        $("#pages").empty();
        let x = a(1, "1");
        console.log(x);
        $("#pages").append(x);
pages - это div. Но по факту получается, что в диве нифига нет.
...
Рейтинг: 0 / 0
07.04.2021, 09:02
    #2923022
Программизд 02
Администратор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гидроцефалы всех стран соединяйтесь!
Jwt JavaScript
Может ей нужен дом объект а не строка?
...
Рейтинг: 0 / 0
07.04.2021, 09:06
    #2923026
WildMage
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Jwt JavaScript
Программизд 02  07.04.2021, 09:02
Может ей нужен дом объект а не строка?
В доках сказано, что принимает и строку. Тем более в другом месте кода такая фигня работает. Только в другом месте divы в основном.
...
Рейтинг: 0 / 0
07.04.2021, 09:09
    #2923031
Программизд 02
Администратор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гидроцефалы всех стран соединяйтесь!
Jwt JavaScript
Может empty как то вредит. Может html код не верен. Ты потестируй добавляя другие варианты.
...
Рейтинг: 0 / 0
07.04.2021, 09:12
    #2923037
WildMage
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Jwt JavaScript
Программизд 02  07.04.2021, 09:09
Может empty как то вредит. Может html код не верен. Ты потестируй добавляя другие варианты.
Да я уже и емпти убирал, и варианты добавлял. Я даже ручками тот хтмл код в панели для разработчиков в хроме в нужный див запихивал. И оно появлялось.
...
Рейтинг: 0 / 0
07.04.2021, 09:15
    #2923044
WildMage
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Jwt JavaScript
WildMage  07.04.2021, 09:12
Программизд 02  07.04.2021, 09:09
Может empty как то вредит. Может html код не верен. Ты потестируй добавляя другие варианты.
Да я уже и емпти убирал, и варианты добавлял. Я даже ручками тот хтмл код в панели для разработчиков в хроме в нужный див запихивал. И оно появлялось.
Возможно я нашел в чем прикол.
...
Рейтинг: 0 / 0
07.04.2021, 09:22
    #2923055
Программизд 02
Администратор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гидроцефалы всех стран соединяйтесь!
Jwt JavaScript
WildMage 

Рассказывай. Так код выглядит ок.
...
Рейтинг: 0 / 0
07.04.2021, 11:35
    #2923412
WildMage
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Jwt JavaScript
Программизд 02  07.04.2021, 09:22
WildMage 

Рассказывай. Так код выглядит ок.
Да ничего особенного. Тупняк мой.
...
Рейтинг: 0 / 0
14.07.2021, 12:40
    #3133799
WildMage
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Jwt JavaScript
Говно ваш джава скрипт. Но чрезвычайно трешовый. Почти гусей можно иметь, блеать.
...
Рейтинг: 0 / 0
12.08.2021, 10:36
    #3191700
WildMage
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Jwt JavaScript
Как сделать панельку, стобы когда при скролировании она вверх экрана прицеплялась?
...
Рейтинг: 0 / 0
12.08.2021, 10:59
    #3191722
Программизд 02
Администратор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гидроцефалы всех стран соединяйтесь!
Jwt JavaScript
WildMage  12.08.2021, 10:36
Как сделать панельку, стобы когда при скролировании она вверх экрана прицеплялась?
Можно разместить панельку сразу прикрепленной position: fixed

Или навесить функцию на событие скролла и там в зависимости от позиции сролла динамически менять у рамнки на position: fixed
...
Рейтинг: 0 / 0
12.08.2021, 11:06
    #3191734
WildMage
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Jwt JavaScript
Программизд 02  12.08.2021, 10:59
WildMage  12.08.2021, 10:36
Как сделать панельку, стобы когда при скролировании она вверх экрана прицеплялась?
Можно разместить панельку сразу прикрепленной position: fixed

Или навесить функцию на событие скролла и там в зависимости от позиции сролла динамически менять у рамнки на position: fixed
При позишн фиксед у меня нижний див наезжает сверху и я не знаю как это побороть.
...
Рейтинг: 0 / 0
12.08.2021, 11:08
    #3191737
WildMage
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Jwt JavaScript
По идее можно было бы сделать основной див не скролируемым, но это не работает. Вернее оверфлоу то работает. Скрола нет. Но он див ведает на всю высоту контента. А вот как див ограничить высотой экрана я не знаю.
...
Рейтинг: 0 / 0
12.08.2021, 11:14
    #3191772
Программизд 02
Администратор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гидроцефалы всех стран соединяйтесь!
Jwt JavaScript
WildMage  12.08.2021, 11:06
Программизд 02  12.08.2021, 10:59
WildMage  12.08.2021, 10:36
...
Можно разместить панельку сразу прикрепленной position: fixed

Или навесить функцию на событие скролла и там в зависимости от позиции сролла динамически менять у рамнки на position: fixed
При позишн фиксед у меня нижний див наезжает сверху и я не знаю как это побороть.
zIndex
...
Рейтинг: 0 / 0
12.08.2021, 11:18
    #3191792
WildMage
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Jwt JavaScript
Программизд 02  12.08.2021, 11:14
WildMage  12.08.2021, 11:06
Программизд 02  12.08.2021, 10:59
...
При позишн фиксед у меня нижний див наезжает сверху и я не знаю как это побороть.
zIndex
А он же порядок наложения определяет. А мне нужно, ятобы оно не накладывалось.
Ну т.е. условно говоря есть вверху див - тулбар. А внизу контент. Вот он пусть и скролируется. А тулбар либо ездит за экраном, либо вообще находится вне зоны скролинга. Но выстввляя оверфлоу на нужный див и убирая скролинг на верхнем диве нифига не решает проблемы. Так как он сразу делает див по высоте контента.
...
Изменено: 12.08.2021, 11:19 - WildMage
Рейтинг: 0 / 0
12.08.2021, 11:33
    #3191868
WildMage
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Jwt JavaScript
Программизд 02  12.08.2021, 10:59
WildMage  12.08.2021, 10:36
Как сделать панельку, стобы когда при скролировании она вверх экрана прицеплялась?
Можно разместить панельку сразу прикрепленной position: fixed

Или навесить функцию на событие скролла и там в зависимости от позиции сролла динамически менять у рамнки на position: fixed
По второму пункту я нагуглил как. Но хотелось бы обойтись без скриптов в этом месте. Только цсс
...
Рейтинг: 0 / 0
12.08.2021, 11:35
    #3191871
Программизд 02
Администратор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гидроцефалы всех стран соединяйтесь!
Jwt JavaScript
WildMage  12.08.2021, 11:33
Программизд 02  12.08.2021, 10:59
WildMage  12.08.2021, 10:36
...
Можно разместить панельку сразу прикрепленной position: fixed

Или навесить функцию на событие скролла и там в зависимости от позиции сролла динамически менять у рамнки на position: fixed
По второму пункту я нагуглил как. Но хотелось бы обойтись без скриптов в этом месте. Только цсс
Вряд ли получится.
...
Рейтинг: 0 / 0
12.08.2021, 12:21
    #3192027
WildMage
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Jwt JavaScript
Программизд 02  12.08.2021, 11:35
WildMage  12.08.2021, 11:33
Программизд 02  12.08.2021, 10:59
...
По второму пункту я нагуглил как. Но хотелось бы обойтись без скриптов в этом месте. Только цсс
Вряд ли получится.
Короче я сделал как мне надо на уровне цсс. Без скрипто.
...
Рейтинг: 0 / 0
02.09.2021, 05:31
    #3232291
WildMage
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Jwt JavaScript
Вопрос. сделал события на ajaxStart и ajaxStop. Он теперь показывает и убирает индикатор.
Но надо не на все события делать показ этого индикатора. В javascript можно как-то получить список исполняемых в данный момент аяксов?
...
Рейтинг: 0 / 0
02.09.2021, 09:44
    #3232495
Программизд 02
Администратор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гидроцефалы всех стран соединяйтесь!
Jwt JavaScript
WildMage  02.09.2021, 05:31
Вопрос. сделал события на ajaxStart и ajaxStop. Он теперь показывает и убирает индикатор.
Но надо не на все события делать показ этого индикатора. В javascript можно как-то получить список исполняемых в данный момент аяксов?
Только самому их отслеживать и в цикле проверять running или нет.
...
Рейтинг: 0 / 0
02.09.2021, 09:48
    #3232517
WildMage
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Jwt JavaScript
Программизд 02  02.09.2021, 09:44
WildMage  02.09.2021, 05:31
Вопрос. сделал события на ajaxStart и ajaxStop. Он теперь показывает и убирает индикатор.
Но надо не на все события делать показ этого индикатора. В javascript можно как-то получить список исполняемых в данный момент аяксов?
Только самому их отслеживать и в цикле проверять running или нет.
Ну так то сам аякс же из где-то хранит
...
Рейтинг: 0 / 0
02.09.2021, 10:34
    #3232624
WildMage
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Jwt JavaScript
Программизд 02  02.09.2021, 09:44
WildMage  02.09.2021, 05:31
Вопрос. сделал события на ajaxStart и ajaxStop. Он теперь показывает и убирает индикатор.
Но надо не на все события делать показ этого индикатора. В javascript можно как-то получить список исполняемых в данный момент аяксов?
Только самому их отслеживать и в цикле проверять running или нет.
Короче для твоего просвещения. Если при аякс запросе указать global:false, то обработчики сверху не будут вызывать.
ЗЫ. Что-то жестко туплю. Недосып сказывается.
...
Рейтинг: 0 / 0
02.09.2021, 10:40
    #3232637
Программизд 02
Администратор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гидроцефалы всех стран соединяйтесь!
Jwt JavaScript
WildMage  02.09.2021, 10:34
Программизд 02  02.09.2021, 09:44
WildMage  02.09.2021, 05:31
...
Только самому их отслеживать и в цикле проверять running или нет.
Короче для твоего просвещения. Если при аякс запросе указать global:false, то обработчики сверху не будут вызывать.
ЗЫ. Что-то жестко туплю. Недосып сказывается.
Это ты jquery подразумевал? :) А я то о нативных XMLHttpRequest говорил.

У меня своя реализация. Юзаю много лет. Надежна как топор.
Код: 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.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
235.
236.
237.
238.
239.
240.
241.
242.
243.
244.
245.
246.
247.
248.
249.
250.
251.
252.
253.
254.
255.
256.
257.
258.
259.
260.
261.
262.
263.
264.
265.
266.
267.
268.
269.
270.
271.
272.
273.
274.
275.
276.
277.
278.
279.
280.
281.
282.
283.
284.
285.
286.
287.
288.
289.
290.
291.
292.
293.
294.
295.
296.
297.
298.
299.
300.
301.
302.
303.
304.
305.
306.
307.
308.
309.
310.
311.
312.
313.
314.
315.
316.
317.
318.
319.
320.
321.
322.
323.
324.
325.
326.
327.
328.
329.
330.
331.
332.
333.
334.
335.
336.
337.
338.
339.
340.
341.
342.
343.
344.
345.
346.
347.
348.
349.
350.
351.
352.
353.
354.
355.
356.
357.
358.
359.
360.
361.
362.
363.
364.
365.
366.
367.
368.
369.
370.
371.
372.
373.
374.
375.
376.
377.
378.
379.
380.
381.
382.
383.
384.
385.
386.
387.
388.
389.
390.
391.
392.
393.
394.
395.
396.
397.
398.
399.
400.
401.
402.
403.
404.
405.
406.
407.
408.
409.
410.
411.
412.
413.
414.
415.
416.
417.
418.
419.
420.
421.
422.
423.
424.
425.
426.
427.
428.
429.
430.
431.
432.
433.
434.
435.
436.
437.
438.
439.
440.
441.
442.
443.
444.
445.
446.
447.
448.
449.
450.
451.
452.
453.
454.
455.
456.
457.
458.
459.
460.
/*
Usage example:

function send_post_request()
{
  var ajax = new JR.AJAX();

  ajax.timeout = 10000; // 10 seconds

  ajax.beforestart = function()
  {
    console.log("ajax beforestart");
  };

  ajax.aftercomplete = function(error)
  {
    if(!error)                    console.log("ajax complete with success");
    else if(error == 'UserAbort') console.log("ajax complete with user abort");
    else                          console.log("ajax complete with error: " + error);
  };

  ajax.onload = function(text, xml)
  {
    console.log("ajax success: " + text);
  };

  ajax.onerror = function(error, url, info)
  {
    console.log("ajax error: " + error);
  };

  ajax.setPOST('some_param', "380");
  ajax.setPOST('another_param', "400");

  ajax.request("process.php");
}

function send_get_request()
{
  var ajax = new JR.AJAX();

  ajax.timeout = 10000; // 10 seconds

  ajax.onload = function(text, xml)
  {
    console.log("ajax success: " + text);
  };

  ajax.onerror = function(error)
  {
    console.log("ajax error: " + error);
  };

  ajax.setGET('some_param', "380");
  ajax.setGET('another_param', "400");

  ajax.request("process.php");
}

function send_form_per_ajax()
{
  var ajax = new JR.AJAX();

  ajax.timeout = 10000; // 10 seconds

  ajax.onload = function(text, xml)
  {
    console.log("ajax success: " + text);
  };

  ajax.onerror = function(error)
  {
    console.log("ajax error: " + error);
  };

  var form = document.getElementById('my_form');

  var formData = new FormData(form);
  formData.append('some_param', "380");
  formData.append('another_param', "400");

  ajax.setFormData(formData);

  ajax.request(form.action);
}
*/

//----------------------------------------------------------------------
JR = {};
//----------------------------------------------------
JR.isEmptyObject = function(obj)
{
  for(var prop in obj)
  {
    if(Object.prototype.hasOwnProperty.call(obj, prop))
    {
      return false;
    }
  }

  return true;
}; // isEmptyObject
//----------------------------------------------------
JR.AJAX = function() {
  // Overridable events

  this.onload  = null;
  this.onerror = null;
  this.beforestart = null;
  this.aftercomplete = null;

  this.error_reported = false;
  this.aftercomplete_reported = false;

  this.running = false;

  this.debug = false;

  this.last_url = '';
  this.name = '-';

  this.timeout = 30000;

  // Arrays for GET and POST parameters

  this.GET  = new Array();
  this.POST = new Array();
  this.FORM_DATA = null;
  this.RAW_DATA = null;
  this.headers = new Array();

  // Timeout handle, for calling clearTimeout

  this.TIMEOUT_HANDLE = null;

  // Initialize

  this.XHR = new XMLHttpRequest();
}; // constructor
//----------------------------------------------------------------------
JR.AJAX.prototype.formDataFileFix = function(formData) {
  if(typeof formData.keys == 'undefined') return;

  try {
        if (formData.keys) {
            var formKeysToBeRemoved = [];

            var keyIterator = formData.keys();

            var item = keyIterator.next();

            while (!item.done) {
                var key = item.value;

                var fileName = null || formData.get(key)['name'];
                var fileSize = null || formData.get(key)['size'];
                if (fileName != null && fileSize != null && fileName == '' && fileSize == 0) {
                    formKeysToBeRemoved.push(key);
                }

                item = keyIterator.next();
            }

            for (var i = 0; i < formKeysToBeRemoved.length; i++) {
                formData.delete(formKeysToBeRemoved[i]);
            }
        }
    }
    catch(err) {
    }
} // formDataFileFix
//----------------------------------------------------------------------
JR.AJAX.prototype.resetParams = function()
{
  this.GET  = new Array();
  this.POST = new Array();
  this.FORM_DATA = null;
  this.RAW_DATA = null;
  this.headers = new Array();
};
//----------------------------------------------------------------------
JR.AJAX.prototype.setHeader = function(header, value)
{
  this.headers[header] = value;
};
//----------------------------------------------------------------------
JR.AJAX.prototype.setGET = function(vname, value)
{
  this.GET[vname] = value;
};
//----------------------------------------------------------------------
JR.AJAX.prototype.setPOST = function(vname, value)
{
  this.POST[vname] = value;
};
//----------------------------------------------------------------------
JR.AJAX.prototype.setFormData = function(formData)
{
  this.FORM_DATA = formData;
};
//----------------------------------------------------------------------
JR.AJAX.prototype.setRawData = function(rawData)
{
  this.RAW_DATA = rawData;
};
//----------------------------------------------------------------------
JR.AJAX.prototype.abort = function()
{
  if(this.debug) debug_line(this.name + ': AJAX Request aborted ' + (this.running ? '(was running)' : 'was not running'));

  if(!this.running) return;

  // Aborting fires the event onreadystatechange
  // as if the server did not respond.
  // To prevent unnecssary error messages, we set
  // error_reported to true.

  this.error_reported = true;

  if(this.TIMEOUT_HANDLE)
  {
    clearTimeout(this.TIMEOUT_HANDLE);
    this.TIMEOUT_HANDLE = null;
  }

  this.running = false;
  this.XHR.abort();

  if(!this.aftercomplete_reported && this.aftercomplete !== null)
  {
    this.aftercomplete_reported = true;
    this.aftercomplete('UserAbort');
  }
};
//----------------------------------------------------------------------
JR.AJAX.prototype.request = function(file)
{
  if(this.debug) debug_line(this.name + ': AJAX Request started');

  this.aftercomplete_reported = false;
  this.error_reported = false;
  this.running = true;

  var v;
  var post;

  this.XHR.abort(); // Close any other connections
  if(this.TIMEOUT_HANDLE)
  {
    clearTimeout(me.TIMEOUT_HANDLE);
    this.TIMEOUT_HANDLE = null;
  }

  this.last_url = file;

  if(!JR.isEmptyObject(this.GET))
  {
    if(this.last_url.indexOf("?") == -1) this.last_url += "?";
    else                                 this.last_url += "&";

    for(v in this.GET)
    {
      if(!Object.prototype.hasOwnProperty.call(this.GET, v)) continue;

      this.last_url += encodeURIComponent(v) + "=" + encodeURIComponent(this.GET[v]) + "&";
    }
  }

  if(this.beforestart !== null)
  {
    this.beforestart();
  }

  if(this.FORM_DATA != null)
  {
    this.formDataFileFix(this.FORM_DATA);

    this.XHR.open("POST", this.last_url, true);

    post = this.FORM_DATA;
  }
  else if(this.RAW_DATA != null)
  {
    this.XHR.open("POST", this.last_url, true);

    post = this.RAW_DATA;
  }
  else if(!JR.isEmptyObject(this.POST))
  {
    this.XHR.open("POST", this.last_url, true);

    post = "";

    for(v in this.POST)
    {
      if(!Object.prototype.hasOwnProperty.call(this.POST, v)) continue;

      post += v + "=" + encodeURIComponent(this.POST[v]) + "&";
    }
  }
  else
  {
    this.XHR.open("GET", this.last_url, true);
    post = null;
  }

  // For the IE, this should be done after open(),
  // otherwise it is not called.
  // It works in other browsers OK!
  // I spent hours to find out why the IE does not fire this event.

  var me = this;

  this.XHR.onreadystatechange = function()
  {
    if(!me) return;

    if(this.readyState == 4)
    {
      if(me.debug)
      {
        debug_line(me.name + ': AJAX Request ended (readyState:' + this.readyState + ', status:' + this.status + ', statusText:' + this.statusText + ')');
      }

      if(me.TIMEOUT_HANDLE)
      {
        clearTimeout(me.TIMEOUT_HANDLE);
        me.TIMEOUT_HANDLE = null;
      }

      me.running = false;

      if(this.status == 200)
      {
        // sucess
        if(me.onload !== null) me.onload(this.responseText, this.responseXML);

        if(me.aftercomplete !== null) me.aftercomplete(null);
      }
      else
      {
        var error = '';
        var info = {};

        info.status = this.status;

        if(this.statusText == '')
        {
          error = 'NoResponse';
        }
        else
        {
          error = this.statusText;
        }

        if(!me.error_reported && me.onerror !== null)
        {
          me.error_reported = true;
          me.onerror(error, me.last_url, info);
        }

        if(!me.aftercomplete_reported && me.aftercomplete !== null)
        {
          me.aftercomplete_reported = true;
          me.aftercomplete(error);
        }
      }
    }
    else
    {
      if(me.debug)
      {
        debug_line(me.name + ': AJAX Request state (readyState:' + this.readyState + ', status:' + this.status + ', statusText:' + this.statusText + ')');
      }
    }
  };

  // native timeout

  this.XHR.ontimeout = function()
  {
    if(!me) return;

    if(me.debug) debug_line(me.name + ': AJAX Request aborted due to the internal timeout');

    if(me.TIMEOUT_HANDLE)
    {
      clearTimeout(me.TIMEOUT_HANDLE);
      me.TIMEOUT_HANDLE = null;
    }

    me.running = false;

    var info = {};
    info.timeout = me.timeout;

    if(!me.error_reported && me.onerror !== null)
    {
      me.error_reported = true;
      me.onerror('Timeout', me.last_url, info);
    }

    if(!me.aftercomplete_reported && me.aftercomplete !== null)
    {
      me.aftercomplete_reported = true;
      me.aftercomplete('Timeout');
    }
  };

  // debug event

  this.XHR.onprogress = function(event)
  {
    if (event.lengthComputable)
    {
      if(me.debug) debug_line(me.name + ': AJAX Request progress - ' + Math.round(100 * event.loaded / event.total) + '%');
    }
  };

  this.XHR.timeout = parseInt(me.timeout) + 5000;

  for(h in this.headers)
  {
    this.XHR.setRequestHeader(h, this.headers[h]);
  }

  this.XHR.send(post);

  // Reset params

  this.resetParams();

  // if the native timeout handling fails

  this.TIMEOUT_HANDLE = setTimeout(function()
                                   {
                                     if(!me) return;

                                     if(me.debug) debug_line(me.name + ': AJAX Request aborted due to the timeout handler');

                                     var info = {};
                                     info.timeout = me.timeout;

                                     if(!me.error_reported && me.onerror !== null)
                                     {
                                       me.error_reported = true;
                                       me.onerror('Timeout', me.last_url, info);
                                     }

                                     if(!me.aftercomplete_reported && me.aftercomplete !== null)
                                     {
                                       me.aftercomplete_reported = true;
                                       me.aftercomplete('Timeout');
                                     }

                                     me.running = false;
                                     me.XHR.abort();
                                   }, me.timeout);
};
//----------------------------------------------------------------------
...
Рейтинг: 0 / 0
02.09.2021, 10:52
    #3232666
WildMage
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Jwt JavaScript
Программизд 02  02.09.2021, 10:40
WildMage  02.09.2021, 10:34
Программизд 02  02.09.2021, 09:44
...
Короче для твоего просвещения. Если при аякс запросе указать global:false, то обработчики сверху не будут вызывать.
ЗЫ. Что-то жестко туплю. Недосып сказывается.
Это ты jquery подразумевал? :) А я то о нативных XMLHttpRequest говорил.

У меня своя реализация. Юзаю много лет. Надежна как топор.
Код: 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.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
235.
236.
237.
238.
239.
240.
241.
242.
243.
244.
245.
246.
247.
248.
249.
250.
251.
252.
253.
254.
255.
256.
257.
258.
259.
260.
261.
262.
263.
264.
265.
266.
267.
268.
269.
270.
271.
272.
273.
274.
275.
276.
277.
278.
279.
280.
281.
282.
283.
284.
285.
286.
287.
288.
289.
290.
291.
292.
293.
294.
295.
296.
297.
298.
299.
300.
301.
302.
303.
304.
305.
306.
307.
308.
309.
310.
311.
312.
313.
314.
315.
316.
317.
318.
319.
320.
321.
322.
323.
324.
325.
326.
327.
328.
329.
330.
331.
332.
333.
334.
335.
336.
337.
338.
339.
340.
341.
342.
343.
344.
345.
346.
347.
348.
349.
350.
351.
352.
353.
354.
355.
356.
357.
358.
359.
360.
361.
362.
363.
364.
365.
366.
367.
368.
369.
370.
371.
372.
373.
374.
375.
376.
377.
378.
379.
380.
381.
382.
383.
384.
385.
386.
387.
388.
389.
390.
391.
392.
393.
394.
395.
396.
397.
398.
399.
400.
401.
402.
403.
404.
405.
406.
407.
408.
409.
410.
411.
412.
413.
414.
415.
416.
417.
418.
419.
420.
421.
422.
423.
424.
425.
426.
427.
428.
429.
430.
431.
432.
433.
434.
435.
436.
437.
438.
439.
440.
441.
442.
443.
444.
445.
446.
447.
448.
449.
450.
451.
452.
453.
454.
455.
456.
457.
458.
459.
460.
/*
Usage example:

function send_post_request()
{
  var ajax = new JR.AJAX();

  ajax.timeout = 10000; // 10 seconds

  ajax.beforestart = function()
  {
    console.log("ajax beforestart");
  };

  ajax.aftercomplete = function(error)
  {
    if(!error)                    console.log("ajax complete with success");
    else if(error == 'UserAbort') console.log("ajax complete with user abort");
    else                          console.log("ajax complete with error: " + error);
  };

  ajax.onload = function(text, xml)
  {
    console.log("ajax success: " + text);
  };

  ajax.onerror = function(error, url, info)
  {
    console.log("ajax error: " + error);
  };

  ajax.setPOST('some_param', "380");
  ajax.setPOST('another_param', "400");

  ajax.request("process.php");
}

function send_get_request()
{
  var ajax = new JR.AJAX();

  ajax.timeout = 10000; // 10 seconds

  ajax.onload = function(text, xml)
  {
    console.log("ajax success: " + text);
  };

  ajax.onerror = function(error)
  {
    console.log("ajax error: " + error);
  };

  ajax.setGET('some_param', "380");
  ajax.setGET('another_param', "400");

  ajax.request("process.php");
}

function send_form_per_ajax()
{
  var ajax = new JR.AJAX();

  ajax.timeout = 10000; // 10 seconds

  ajax.onload = function(text, xml)
  {
    console.log("ajax success: " + text);
  };

  ajax.onerror = function(error)
  {
    console.log("ajax error: " + error);
  };

  var form = document.getElementById('my_form');

  var formData = new FormData(form);
  formData.append('some_param', "380");
  formData.append('another_param', "400");

  ajax.setFormData(formData);

  ajax.request(form.action);
}
*/

//----------------------------------------------------------------------
JR = {};
//----------------------------------------------------
JR.isEmptyObject = function(obj)
{
  for(var prop in obj)
  {
    if(Object.prototype.hasOwnProperty.call(obj, prop))
    {
      return false;
    }
  }

  return true;
}; // isEmptyObject
//----------------------------------------------------
JR.AJAX = function() {
  // Overridable events

  this.onload  = null;
  this.onerror = null;
  this.beforestart = null;
  this.aftercomplete = null;

  this.error_reported = false;
  this.aftercomplete_reported = false;

  this.running = false;

  this.debug = false;

  this.last_url = '';
  this.name = '-';

  this.timeout = 30000;

  // Arrays for GET and POST parameters

  this.GET  = new Array();
  this.POST = new Array();
  this.FORM_DATA = null;
  this.RAW_DATA = null;
  this.headers = new Array();

  // Timeout handle, for calling clearTimeout

  this.TIMEOUT_HANDLE = null;

  // Initialize

  this.XHR = new XMLHttpRequest();
}; // constructor
//----------------------------------------------------------------------
JR.AJAX.prototype.formDataFileFix = function(formData) {
  if(typeof formData.keys == 'undefined') return;

  try {
        if (formData.keys) {
            var formKeysToBeRemoved = [];

            var keyIterator = formData.keys();

            var item = keyIterator.next();

            while (!item.done) {
                var key = item.value;

                var fileName = null || formData.get(key)['name'];
                var fileSize = null || formData.get(key)['size'];
                if (fileName != null && fileSize != null && fileName == '' && fileSize == 0) {
                    formKeysToBeRemoved.push(key);
                }

                item = keyIterator.next();
            }

            for (var i = 0; i < formKeysToBeRemoved.length; i++) {
                formData.delete(formKeysToBeRemoved[i]);
            }
        }
    }
    catch(err) {
    }
} // formDataFileFix
//----------------------------------------------------------------------
JR.AJAX.prototype.resetParams = function()
{
  this.GET  = new Array();
  this.POST = new Array();
  this.FORM_DATA = null;
  this.RAW_DATA = null;
  this.headers = new Array();
};
//----------------------------------------------------------------------
JR.AJAX.prototype.setHeader = function(header, value)
{
  this.headers[header] = value;
};
//----------------------------------------------------------------------
JR.AJAX.prototype.setGET = function(vname, value)
{
  this.GET[vname] = value;
};
//----------------------------------------------------------------------
JR.AJAX.prototype.setPOST = function(vname, value)
{
  this.POST[vname] = value;
};
//----------------------------------------------------------------------
JR.AJAX.prototype.setFormData = function(formData)
{
  this.FORM_DATA = formData;
};
//----------------------------------------------------------------------
JR.AJAX.prototype.setRawData = function(rawData)
{
  this.RAW_DATA = rawData;
};
//----------------------------------------------------------------------
JR.AJAX.prototype.abort = function()
{
  if(this.debug) debug_line(this.name + ': AJAX Request aborted ' + (this.running ? '(was running)' : 'was not running'));

  if(!this.running) return;

  // Aborting fires the event onreadystatechange
  // as if the server did not respond.
  // To prevent unnecssary error messages, we set
  // error_reported to true.

  this.error_reported = true;

  if(this.TIMEOUT_HANDLE)
  {
    clearTimeout(this.TIMEOUT_HANDLE);
    this.TIMEOUT_HANDLE = null;
  }

  this.running = false;
  this.XHR.abort();

  if(!this.aftercomplete_reported && this.aftercomplete !== null)
  {
    this.aftercomplete_reported = true;
    this.aftercomplete('UserAbort');
  }
};
//----------------------------------------------------------------------
JR.AJAX.prototype.request = function(file)
{
  if(this.debug) debug_line(this.name + ': AJAX Request started');

  this.aftercomplete_reported = false;
  this.error_reported = false;
  this.running = true;

  var v;
  var post;

  this.XHR.abort(); // Close any other connections
  if(this.TIMEOUT_HANDLE)
  {
    clearTimeout(me.TIMEOUT_HANDLE);
    this.TIMEOUT_HANDLE = null;
  }

  this.last_url = file;

  if(!JR.isEmptyObject(this.GET))
  {
    if(this.last_url.indexOf("?") == -1) this.last_url += "?";
    else                                 this.last_url += "&";

    for(v in this.GET)
    {
      if(!Object.prototype.hasOwnProperty.call(this.GET, v)) continue;

      this.last_url += encodeURIComponent(v) + "=" + encodeURIComponent(this.GET[v]) + "&";
    }
  }

  if(this.beforestart !== null)
  {
    this.beforestart();
  }

  if(this.FORM_DATA != null)
  {
    this.formDataFileFix(this.FORM_DATA);

    this.XHR.open("POST", this.last_url, true);

    post = this.FORM_DATA;
  }
  else if(this.RAW_DATA != null)
  {
    this.XHR.open("POST", this.last_url, true);

    post = this.RAW_DATA;
  }
  else if(!JR.isEmptyObject(this.POST))
  {
    this.XHR.open("POST", this.last_url, true);

    post = "";

    for(v in this.POST)
    {
      if(!Object.prototype.hasOwnProperty.call(this.POST, v)) continue;

      post += v + "=" + encodeURIComponent(this.POST[v]) + "&";
    }
  }
  else
  {
    this.XHR.open("GET", this.last_url, true);
    post = null;
  }

  // For the IE, this should be done after open(),
  // otherwise it is not called.
  // It works in other browsers OK!
  // I spent hours to find out why the IE does not fire this event.

  var me = this;

  this.XHR.onreadystatechange = function()
  {
    if(!me) return;

    if(this.readyState == 4)
    {
      if(me.debug)
      {
        debug_line(me.name + ': AJAX Request ended (readyState:' + this.readyState + ', status:' + this.status + ', statusText:' + this.statusText + ')');
      }

      if(me.TIMEOUT_HANDLE)
      {
        clearTimeout(me.TIMEOUT_HANDLE);
        me.TIMEOUT_HANDLE = null;
      }

      me.running = false;

      if(this.status == 200)
      {
        // sucess
        if(me.onload !== null) me.onload(this.responseText, this.responseXML);

        if(me.aftercomplete !== null) me.aftercomplete(null);
      }
      else
      {
        var error = '';
        var info = {};

        info.status = this.status;

        if(this.statusText == '')
        {
          error = 'NoResponse';
        }
        else
        {
          error = this.statusText;
        }

        if(!me.error_reported && me.onerror !== null)
        {
          me.error_reported = true;
          me.onerror(error, me.last_url, info);
        }

        if(!me.aftercomplete_reported && me.aftercomplete !== null)
        {
          me.aftercomplete_reported = true;
          me.aftercomplete(error);
        }
      }
    }
    else
    {
      if(me.debug)
      {
        debug_line(me.name + ': AJAX Request state (readyState:' + this.readyState + ', status:' + this.status + ', statusText:' + this.statusText + ')');
      }
    }
  };

  // native timeout

  this.XHR.ontimeout = function()
  {
    if(!me) return;

    if(me.debug) debug_line(me.name + ': AJAX Request aborted due to the internal timeout');

    if(me.TIMEOUT_HANDLE)
    {
      clearTimeout(me.TIMEOUT_HANDLE);
      me.TIMEOUT_HANDLE = null;
    }

    me.running = false;

    var info = {};
    info.timeout = me.timeout;

    if(!me.error_reported && me.onerror !== null)
    {
      me.error_reported = true;
      me.onerror('Timeout', me.last_url, info);
    }

    if(!me.aftercomplete_reported && me.aftercomplete !== null)
    {
      me.aftercomplete_reported = true;
      me.aftercomplete('Timeout');
    }
  };

  // debug event

  this.XHR.onprogress = function(event)
  {
    if (event.lengthComputable)
    {
      if(me.debug) debug_line(me.name + ': AJAX Request progress - ' + Math.round(100 * event.loaded / event.total) + '%');
    }
  };

  this.XHR.timeout = parseInt(me.timeout) + 5000;

  for(h in this.headers)
  {
    this.XHR.setRequestHeader(h, this.headers[h]);
  }

  this.XHR.send(post);

  // Reset params

  this.resetParams();

  // if the native timeout handling fails

  this.TIMEOUT_HANDLE = setTimeout(function()
                                   {
                                     if(!me) return;

                                     if(me.debug) debug_line(me.name + ': AJAX Request aborted due to the timeout handler');

                                     var info = {};
                                     info.timeout = me.timeout;

                                     if(!me.error_reported && me.onerror !== null)
                                     {
                                       me.error_reported = true;
                                       me.onerror('Timeout', me.last_url, info);
                                     }

                                     if(!me.aftercomplete_reported && me.aftercomplete !== null)
                                     {
                                       me.aftercomplete_reported = true;
                                       me.aftercomplete('Timeout');
                                     }

                                     me.running = false;
                                     me.XHR.abort();
                                   }, me.timeout);
};
//----------------------------------------------------------------------
Короче джаваскрипт то еще гавнище.
...
Рейтинг: 0 / 0
01.02.2022, 13:30
    #3594386
WildMage
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Jwt JavaScript
Программизд 02 скажи, а в джава скрипте можно как-то универсально сделать колбеки с произвольным числом параметров. А потом так и вызывать?
Код: JavaScript
1.
2.
3.
4.
5.
6.
7.
8.
9.
function funct(a,b)
{
async(funct)//тут как-то передать параметры a и b
}
function async(callback)
{
...
callback() //тут их обратно передать
}
Соответственно число параметров может различаться. Такую дичь можно сделать?
...
Рейтинг: 0 / 0
Форумы / Вопросы по IT / Jwt JavaScript / 25 сообщений из 77, страница 3 из 4
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали тему (2): Анонимы (2)
Игнорируют тему (3): Королева Жезлов, erbol, Конякула
Читали форум (3): Анонимы (2), Yandex Bot 3 мин.
Пользователи онлайн (13): Анонимы (11), Bing Bot 1 мин., Yandex Bot 3 мин.
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]