Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Расширение метода ядра (https://javascript.ru/forum/jquery/29208-rasshirenie-metoda-yadra.html)

see613 19.06.2012 19:15

Расширение метода ядра
 
Здесь http://james.padolsey.com/javascript...s-with-jquery/ есть статья о неплохой штуке - простой реализации кросс-доменнных аяксов. Здесь https://github.com/padolsey/jQuery-P...xdomainajax.js автор этой статьи расширил метод .ajax, чтобы если в адресе есть http(s), то выполнялся бы кроссдоменный запрос.
Нужно засунуть данный код не в .ajax, а в отдельный метод .ajaxAdvanced. У меня выдает ошибку что параметр _ajax не определен. И вообще както я не до конца понимаю что здесь происходит, похоже единственный аргумент _ajax - это функция(или метод), в конце выполняется код
return _ajax.apply(this, arguments);
но что это за функция?

Deff 19.06.2012 19:29

see613,
Там нужно поставить плагин, https://github.com/padolsey/jQuery-P...xdomainajax.js
Который похоже хакает через прокси yahooapis.com

see613 19.06.2012 19:49

так это ж вроде не плагин, а как раз расширение метода .ajax. Мне просто нужно вместо этого сделать новый метод ajaxAdvanced.

Deff 19.06.2012 20:06

see613,
Там два плагина нужны (Или расширения
https://github.com/padolsey/jQuery-P...main-ajax/test

+ За Темку!

Цитата:

Сообщение от see613
Мне просто нужно вместо этого сделать новый метод
ajaxAdvanced.

Собственно Вам тогда слегка править xdomainajax.js

*Имхо на русско-сайтах притормаживает от 3 до 20 сек загрузка

see613 19.06.2012 20:44

возможно я просто не совсем удачно объяснил в чем суть.
Цитата:

Собственно Вам тогда слегка править xdomainajax.js
В том то и штука, что у меня не получается корректно править xdomainajax.js, он выдает ошибку что параметр _ajax не определен. Я как бы не новичок в jQuery, но это мне не далось. Был бы крайне признателен, если б показали правильный код.
Вообще я предполагал, что все изменения сводятся к изменению названия метода в начале
jQuery.ajax = (function(_ajax){

и в конце
})(jQuery.ajax);

но увы

vadim5june 19.06.2012 21:52

Цитата:

Сообщение от see613 (Сообщение 182552)
.
Вообще я предполагал, что все изменения сводятся к изменению названия метода в начале
jQuery.ajax = (function(_ajax){

и в конце
})(jQuery.ajax);

но увы

А в конце зачем-только в начале
Мы же переопределяем метод
jQuery.ajaxAdvanced= (function(_ajax)
...)(jQuery.ajax)

Deff 19.06.2012 22:21

Цитата:

Сообщение от vadim5june
А в конце зачем-только в начале

Если вы метод переопределили то и вызов тож переопределите
Вызов как начальный setter идёт

vadim5june 19.06.2012 22:24

Цитата:

Сообщение от Deff (Сообщение 182582)
Если вы метод переопределили то и вызов тож переопределите
Вызов как начальный setter идёт

нет это же расширение стандартного
метода-если переопределите в конце то у Вас вообще неработающий код получится

see613 20.06.2012 07:29

vadim5june, мне как раз нужно не меняя стандартный .ajax, сделать новый метод .ajaxAdvanced. И подскажите в чем смысл последней строки?
})(jQuery.ajax);

Deff 20.06.2012 08:45

see613,
А стандартный разве меняецо ?
Там анализ - если localhost - то все по старому - если адрес не с текущего домена - тады функция идет по пути вызова API c yahooapis.com

vadim5june 20.06.2012 08:51

Цитата:

Сообщение от Deff (Сообщение 182657)
see613,
А стандартный разве меняецо ?
Там анализ - если localhost - то все по старому - если адрес не с текущего домена - тады функция идет по пути вызова API c yahooapis.com

Ну да так и есть и все это у них присваивается JQuery.ajax который можно и переименовать если есть желание
а стндартный JQuery.ajax передается в качестве аргумента в анонимную функцию и его не надо переименовывать

see613 20.06.2012 09:04

Штука в том что, на страницах будет еще куча скриптов(точнее уже есть). И скорее всего где нибудь используется абсолютный путь(он же смотрит именно наличие http(s)). А учитывая, что ты писал
Цитата:

*Имхо на русско-сайтах притормаживает от 3 до 20 сек загрузка
то такого нам не надо на обычном аяксе.
Просто почему-то мне кажется, что это не сложная задача. Просто сечас мне этого сделать не удалось.

Deff 20.06.2012 09:36

see613,
Гы - я ж написал - типовой аякс (а он ток с одноименного хоста) идет через стандартную функцию - а обращение - к русским не русским не с Вашего домена, - уже через проксирование, а в стандартном - эта операция вообще не проходит..

vadim5june 20.06.2012 09:38

Цитата:

Сообщение от see613 (Сообщение 182661)
то такого нам не надо на обычном аяксе.
.

стандартный аякс будет выводится попрежнему-там же есть
return _ajax.apply(this, arguments);
а в случае если другой домен то
return function(o) {var url = o.url; ...

see613 20.06.2012 11:12

Это была моя ошибка, я не вчитался в функцию, определяющую внешний/невнешний url. Мне показалось она определяет это только проверяя: если абсолютный путь(с http://), то внешний; если относительный путь, то внутренний.
Всем спасибо, можно закрывать


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