admin-ajax.php vs Пользовательский шаблон страницы для запросов Ajax
-
-
Кстати: если вы хотите создать api на своем сайте wordpress и хотите,чтобы URL-адрес имел смысл как URL-адрес запроса api.Затем вы можете переписать мод,чтобы `http://site.com/api/` соответствовал `http://site.com/wp-admin/admin-ajax.php`BTW: if you want to make a api on your wordpress site and want a url that make sense as api request url. Then you can do some mod rewrite so `http://site.com/api/` maps to `http://site.com/wp-admin/admin-ajax.php`
- 0
- 2012-07-22
- Sisir
-
2 ответ
- голосов
-
- 2012-07-22
Во-первых,очевидным недостатком первого метода является то,что его правильная работа зависит от конкретной страницы,шаблона и структуры постоянных ссылок.Использование
admin-ajax.php
будет правильно работать в любом контексте,теме или плагине,где соблюдаются надлежащие передовые практики WordPress.Менее очевидным недостатком первого метода является то,что он использует больше памяти,чем при выполнении вызовов AJAX с поддержкой WordPress,поскольку загружается вся среда WordPress,поскольку предполагается,что будет выводиться интерфейсная страница или страница администратора.
Добавление NONCE к
admin-ajax.php
обеспечивает простую встроенную безопасность.First, the obvious drawback to the first method is that it depends on your specific page, template, and permalink structure to all work correctly. Using
admin-ajax.php
will work correctly in any context, theme or plugin, where proper WordPress best practices are followed.The less obvious drawback to the first method is that it uses more memory than doing WordPress-enabled AJAX calls, since the whole WordPress environment is loaded, as it's presumed that a front-end or admin page will be output.
The addition of NONCEs with
admin-ajax.php
provides easy, built-in security.-
Честно говоря,вся среда WordPress + админка также загружается для admin-ajax.php.Единственное,что пропускается,- это загрузчик шаблонов.Конечно,`admin-ajax.php` по-прежнему является правильным способом.:)To be fair, the entire WordPress environment + the admin area is loaded for `admin-ajax.php` as well. The only thing that gets skipped is the template loader. `admin-ajax.php` is still the correct way, of course. :)
- 1
- 2012-07-22
- chrisguitarguy
-
- 2013-12-04
admin-ajax.php
- не всегда правильный путь. Например,если вы хотите получить сообщение,вам может быть лучше использовать что-то вродеtemplate_redirect()
для загрузки настраиваемого шаблона,который возвращает JSON (или все,что вам нужно вернуть).Почему? Кеширование. Когда вы используете
admin-ajax.php
,вы в основном исключаете возможность для некоторых систем кеширования сохранять вывод ответа сервера (обычно URL-адреса администратора,и в частности admin-ajax.php,не должны быть кешируется). С другой стороны,использованиеtemplate_redirect()
позволяет поддерживать отдельные URL-адреса,которые многие подключаемые модули кеширования и ускорители HTTP могут использовать для хранения данных. Даже некоторые внутренние системы кэширования могут не задействовать себя вadmin-ajax.php
,если они настроены так,чтобы избегать кеширования при использованииis_admin()
.Конечно,если вы не получаете что-то довольно статичное,например пост,кеширование может быть действительно плохим ... и в этом случае
admin-ajax.php
- гораздо лучший выбор .admin-ajax.php
isn't always the right way to go. If you're looking to fetch a post, for example, you may actually better off using something liketemplate_redirect()
to load a custom template that returns JSON (or whatever you need returned).Why? Caching. When you use
admin-ajax.php
you're basically eliminating the opportunity for some cache systems to save the output of the server response (generally admin URLs, and specifically admin-ajax.php, should not be cached). Usingtemplate_redirect()
on the other hand allows for maintaining separate URLs that many cache plugins and HTTP accelerators would be likely to use to keep the data. Even some back-end caching systems may not involve themselves inadmin-ajax.php
if they're configured to avoid caching whenis_admin()
.Of course, if you're not getting something fairly static like a post, caching could actually be a really bad thing... in which case
admin-ajax.php
is a far better choice.-
Можете ли вы подробнее остановиться на этом?Я не вижу причин,по которым вы не можете кэшировать вызов AJAX с помощью admin-ajax.php.Can you expand upon this? I see no reason you can't cache an AJAX call using `admin-ajax.php`.
- 0
- 2013-12-04
- s_ha_dum
-
Конечно.Вполне возможно кэшировать запрос БД,объекты и т. Д.,Задействованные в вызове `admin-ajax.php`,на самом деле я не слишком уверен в деталях этого.Но если вы используете что-то,что выполняет кеширование на основе URL-адресов,`admin-ajax.php` не будет задействован,поскольку все ваши AJAX-запросы относятся к этому одному URL-адресу с переданными разными параметрами. Однако,если вы перейдете по маршрутуtemplate_redirect (),ваши вызовы AJAX для разных сообщений фактически будут запросами на разные URL-адреса,позволяя системе кеширования на основе URL-адресов творить чудеса.Sure. It may be perfectly possible to cache the DB query, objects, etc involved in an `admin-ajax.php` call, I'm actually not too sure about the details of that. But if you're using something that does URL-based caching, `admin-ajax.php` isn't going to be involved — since all your AJAX requests are to that one URL with just different parameters passed in. However, if you go the `template_redirect()` route, your AJAX calls for different posts will actually be requests to different URLs, allowing a URL-based caching system to work its magic.
- 0
- 2013-12-04
- Drywall
-
Итак,вы говорите о кэшировании строго на основе URL-адресов,но вы упомянули хуки.Существует ряд ловушек,которые должны разрешать кэширование запросов к `admin-adjax.php`,плюс,если OP может записывать кеширование объектов в обратные вызовы.Я предлагаю вам отредактировать ответ,чтобы немного прояснить/предупредить его.So what you are talking about is strictly URL-based caching, but you mentioned hooks. There are a number of hooks that should allow caching of requests to `admin-adjax.php`, plus, if the OP can write object caching into the callbacks. I would suggest you edit the answer to clarify/caveat it a bit.
- 0
- 2013-12-04
- s_ha_dum
-
Благодарю.Я внес поправки,чтобы убрать ссылку на крючки и внести ясность.Кэширование на основе URL-адресов является наиболее четкой ситуацией,но,как упоминается в моем измененном заявлении,если какая-либо система кеширования отключается в области администрирования (что возможно,хотя я не могу однозначно сказать,что какие-либо плагины делают/не делают)t сделать это) то вы все еще упускаете.Лучше?Thanks. I have amended to eliminate the reference to hooks and to clarify. URL-based caching is the most clear-cut situation, but as my amended statement mentions, if whatever caching system is in place backs off within the admin area (which is a possibility though I can't definititely say any plugins do/don't do that) then you're still missing out. Better?
- 0
- 2013-12-04
- Drywall
Есть ли причина использовать admin-ajax.php для запросов ajax вместо настраиваемого шаблона страницы?
Я не знал о admin-ajax.php до недавнего времени,поэтому то,что я делал,- это создание настраиваемого шаблона страницы,подобного этому:
И вызов ajax будет к URL-адресу http://mysite.com/api/,по которому я опубликовал пустую страницу,используя мой шаблон страницы API. Кажется,это дает мне доступ ко всем моим функциям WordPress и выводит данные.
Однако недавно я прочитал admin-ajax.php и понял,что еще один способ подключения к базе данных WordPress - это вызвать URL-адрес http://mysite.com/wp-admin/admin-ajax.php и иметь такие функции:
Неправильно ли подключать первым способом? Обеспечивает ли admin-ajax.php дополнительную безопасность или что-то в этом роде? Спасибо за любой вклад!