admin-ajax.php vs modello di pagina personalizzato per richieste Ajax
-
-
BTW: se vuoi creare un'API sultuo sito wordpresse desideri un URL che abbia senso come URL di richiesta API.Quindipuoi riscrivere qualchemodin modo che `http://site.com/api/` vengamappato a `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 risposta
- voti
-
- 2012-07-22
Inprimo luogo,l'ovvio svantaggio delprimometodo è che dipende dallatua specificapagina,modelloe struttura delpermalinkperfunzionare correttamente.L'utilizzo di
admin-ajax.php
funzionerà correttamentein qualsiasi contesto,tema oplugin,dove vengono seguite lemiglioripratiche di WordPress appropriate.Lo svantaggiomeno ovvio delprimometodo è che utilizzapiùmemoria rispetto alle chiamate AJAX abilitateper WordPress,poiché l'intero ambiente WordPress viene caricato,poiché sipresume che verràemessa unapaginafront-end o di amministrazione.
L'aggiunta di NONCE con
admin-ajax.php
fornisce una sicurezza semplicee integrata.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.-
Peressere onesti,l'intero ambiente WordPress + l'area di amministrazione viene caricato ancheper `admin-ajax.php`.L'unica cosa che viene saltata èil caricatore dimodelli.`admin-ajax.php` è ancorailmodo corretto,ovviamente.:)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
non è sempre la stradagiusta dapercorrere. Se stai cercando di recuperare unpost,adesempio,potrestieffettivamente utilizzare qualcosa cometemplate_redirect()
per caricare unmodellopersonalizzato che restituisce JSON (o qualsiasi cosati venga restituita).Perché? Caching. Quando usi
admin-ajax.php
stai sostanzialmenteeliminando l'opportunitàper alcuni sistemi di cache di salvare l'output della risposta del server (generalmentegli URL di amministrazione,e inparticolare admin-ajax.php,non dovrebberoesserememorizzatonella cache). L'utilizzo ditemplate_redirect()
d'altraparte consente dimantenere URL separati chemoltiplug-in della cachee acceleratori HTTPpotrebbero utilizzareper conservarei dati. Anche alcuni sistemi di cachingback-endpotrebberononessere coinvoltiinadmin-ajax.php
se sono configuratiperevitareil caching quandois_admin()
.Ovviamente,senon stai ricevendo qualcosa di abbastanza statico come unpost,lamemorizzazionenella cachepotrebbeeffettivamenteessere una cosa davveronegativa ...nel qual caso
admin-ajax.php
è una scelta digran lungamigliore .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.-
Puoi approfondire questo argomento?Non vedomotivoper cuinonpuoimemorizzarenella cache una chiamata AJAX usando `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
-
Sicuro.Potrebbeessereperfettamentepossibilememorizzarenella cache la query DB,gli oggetti,ecc. Coinvoltiin una chiamata `admin-ajax.php`,in realtànon sonotroppo sicuro dei dettagli.Ma se stai usando qualcosa cheesegue lamemorizzazionenella cachebasata su URL,`admin-ajax.php`non sarà coinvolto -poichétutte letue richieste AJAX sonoper quell'URL con soloparametri diversipassati. Tuttavia,se seguiilpercorso `template_redirect ()`,letue chiamate AJAXperpost diversi sarannoeffettivamente richieste a URL diversi,consentendo a un sistema di cachebasato su URL difare la suamagia.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
-
Quindi quello di cui staiparlando è un caching strettamentebasato su URL,ma haimenzionatogli hook.Ci sono un certonumero di hook che dovrebbero consentireil caching delle richieste a `admin-adjax.php`,in più,se l'OPpuò scrivereil caching degli oggettinei callback.Ti suggerirei dimodificare la rispostaper chiarirlo/avvertirlo unpo '.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
-
Grazie.Homodificatopereliminareil riferimento aigancie per chiarire.Lamemorizzazionenella cachebasata su URL è la situazionepiù chiara,ma comemenziona lamia dichiarazionemodificata,se qualsiasi sistema dimemorizzazionenella cache siain atto si ritiranell'area di amministrazione (che è unapossibilità anche senonposso dire con certezza chenessunpluginfa/nonfa "nonfarlo) allorati stai ancoraperdendo.Meglio?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
C'è qualchemotivoper utilizzare admin-ajax.phpper le richieste ajax rispetto a unmodello dipaginapersonalizzato?
Non sapevo di admin-ajax.phpfino apocotempofa,quindi quello che stavofacendo è stato creare unmodello dipaginapersonalizzato come questo:
E la chiamata ajax sarebbe all'URL http://mysite.com/api/,che è dove ho hapubblicato unapagina vuota utilizzandoilmiomodello dipagina API. Questo sembra darmi accesso atutte lemie funzioni di WordPresse sputare dati.
Tuttavia,di recente ho letto su admin-ajax.phpe ho capito che un altromodoper connettersi al database di WordPress è chiamare l'URL http://mysite.com/wp-admin/admin-ajax.php e hafunzioni come questa:
È sbagliato connettersinelprimomodo? Admin-ajax.phpfornisce una sicurezzaextra o qualcosa delgenere? Grazieper l'input!