Qual é o método / implementação mais rápido para um retorno de chamada do Ajax?

18

Eu tenho um mapa que carrega marcadores via ajax em vários / vários eventos de mapa. Atualmente, defino um retorno de chamada de página personalizado para o meu hook_menu()item que imprime meu json / js.

Como o retorno de chamada da minha página não retorna nenhum conteúdo e apenas o imprime , o Drupal não processa o modelo completo, o menu etc., e, portanto, permite que eu retorne uma página apenas com meu JavaScript.

Embora isso funcione, acredito que o Drupal ainda esteja totalmente inicializando, o que significa que está adicionando muita sobrecarga que eu gostaria de eliminar.

Eu estive analisando o manipulador de retorno de chamada JavaScript de alto desempenho , que se apresenta como um "manipulador de retorno de chamada JavaScript de alto desempenho" e que, em resumo, parece oferecer um js.phpelogio index.phppara direcionar suas solicitações e personalizar / limitar / otimizar a inicialização do Drupal por padrão.

Infelizmente o projeto js ainda não tem uma versão D7 ( solicite uma aqui ), o que nos leva ao começo ...

Qual é a maneira mais rápida de implementar um retorno de chamada do Ajax no Drupal?

electblake
fonte

Respostas:

8

Defino um retorno de chamada de página personalizado para o meu hook_menu()item que imprime meu json / js.

Isso é o que o Drupal 6 ofereceu. A estrutura Drupal 7 AJAX pode fazer um pouco mais do que isso. Sim, ele inicializa o Drupal, mas também oferece muitos recursos de graça. Em resumo, você pode usar ajax_deliver () como um método de entrega de página e enviar comandos para o navegador.

... O Ajax pode ser ativado adicionando classes a botões e links. Ao adicionar a classe 'use-ajax' a um link, o link será carregado por meio de uma chamada Ajax. Ao usar esse método, o href do link pode conter '/ nojs /' como parte do caminho. Quando a estrutura do Ajax faz a solicitação, ela será convertida em '/ ajax /'. O servidor é capaz de saber facilmente se essa solicitação foi feita por meio de uma solicitação real do Ajax ou em um estado degradado e responder adequadamente.

No entanto, se você deseja contornar a estrutura por razões de desempenho, não há nada para impedi-lo de chamar arquivos php no seu módulo diretamente do javascript. Você não terá nenhuma bondade Drupal, mas também terá controle total sobre a página.

Jeremy French
fonte
Obrigado! Independentemente do desempenho Eu realmente deveria estar usando o Framework Ajax (agora que eu sei sobre isso) b / c quaisquer melhorias no processo de solicitação de página ajax provavelmente vai acontecer dentro desse contexto :)
electblake
2
Dê uma olhada nos módulos de exemplo, eles ajudarão bastante, a estrutura é voltada para formulários, mas pode ser usada em qualquer lugar. Eu editei minha resposta um pouco sobre a classe 'use-ajax'.
Jeremy French
3
Às vezes, chamar arquivos PHP diretamente é bom. Você pode até incluir esse arquivo no bootstrap.inc e, em seguida, chamar api.drupal.org/api/drupal/includes--bootstrap.inc/function/… para o nível específico que você precisa.
precisa
4

Um pouco tarde, mas especialmente se você estiver usando esse retorno de chamada ajax para a votação (verificação de novas mensagens, por exemplo), não é uma alternativa interessante: integração Drupal node.js .

Em vez de pesquisar, ele permite que você construa um sistema parecido com um evento, em que os usuários (também conhecido como JS na página) mantêm uma conexão aberta com o servidor node.js. Se algo acontecer, você poderá notificar diretamente todos os usuários através do node.js.

Berdir
fonte
Nunca é tarde para ótimas sugestões - nunca pensei em usar o node.js para esse tipo de coisa, mas de repente faz sentido heh, obrigado!
Electblake 20/05
3

Como você deseja implementar um retorno de chamada do Ajax no Drupal , o uso do módulo JS parece uma boa aposta. Eu apenas dei uma olhada rápida no código, e é basicamente o que eu sugeriria (mas com muito mais atenção aos detalhes). O mantenedor também é um dos principais desenvolvedores do Drupal.

Parece que você terá que usar module_load_include()ou talvez uma include 'sites/all/modules/contrib/...';abordagem mais manual se precisar usar APIs de outros módulos.

O próprio problema que você está falando tem sido um tópico importante ultimamente. A palestra de Dries da DrupalCon Chicago falou sobre como o Drupal 8 precisa de APIs melhores para fazer retornos de chamada e formatos de saída não HTML.

Adam DiCarlo
fonte
Então, resumindo - continue pesquisando JS.php & do / project / js? Começarei a solicitar na edição que D7 a edição. Obrigado pelo vídeo!
electblake
Sim, é uma pena que o projeto JS ainda não tenha sido portado para o D7. É uma pena, é tão difícil obter uma solicitação de página leve.
Matt Collins