Existe um div chamado "Conteúdo":
<div id="content"></div>
Deve ser preenchido com dados de um arquivo PHP, por AJAX, incluindo uma <script>
tag. No entanto, o script dentro desta tag não está sendo executado.
<div id="content"><!-- After AJAX loads the stuff that goes here -->
<script type="text/javascript">
//code
</script>
<!-- More stuff that DOES work here -->
</div>
javascript
html
ajax
JCOC611
fonte
fonte
window.onload
crio umXMTHttpRequest
objeto para solicitar outra página (php) que contém o conteúdo da div, incluindo um script. Estou fazendo isso com JS simples, sem bibliotecas (além da minha própria lol)Respostas:
JavaScript inserido como texto DOM não será executado. No entanto, você pode usar o padrão de script dinâmico para atingir seu objetivo. A ideia básica é mover o script que você deseja executar para um arquivo externo e criar uma tag de script ao obter sua resposta Ajax. Em seguida, você define o
src
atributo de sua tag de script e voila, carrega e executa o script externo.Esta outra postagem StackOverflow também pode ser útil para você: Os scripts podem ser inseridos com innerHTML? .
fonte
$('#audit-view script').each(function (index, element) { eval(element.innerHTML); })
Usei este código, está funcionando bem
fonte
Se você carregar um bloco de script em seu div via Ajax, como este:
... simplesmente atualiza o DOM da sua página, myFunction () não é necessariamente chamado.
Você pode usar um método de retorno de chamada Ajax, como o do jQuery método ajax () para definir o que executar quando a solicitação terminar.
O que você está fazendo é diferente de carregar uma página com JavaScript incluído desde o início (que é executado).
Um exemplo de como usar o callback de sucesso e o callback de erro depois de buscar algum conteúdo:
Outra maneira rápida e suja é usar eval () para executar qualquer código de script que você inseriu como texto DOM se não quiser usar jQuery ou outra biblioteca.
fonte
Aqui está o script que avaliará todas as tags de script no texto.
Basta chamar esta função depois de receber seu HTML do servidor. Esteja avisado: o uso
eval
pode ser perigoso.Demo: http://plnkr.co/edit/LA7OPkRfAtgOhwcAnLrl?p=preview
fonte
Isso 'simplesmente funciona' para mim usando jQuery, desde que você não tente anexar um subconjunto do HTML retornado por XHR ao documento. (Veja este relatório de bug mostrando o problema com o jQuery.)
Aqui está um exemplo que mostra como ele funciona:
Aqui está o equivalente ao acima: http://jsfiddle.net/2CTLH/
fonte
Aqui está uma função que você pode usar para analisar respostas AJAX, especialmente se você usar minifiedjs e quiser que ele execute o Javascript retornado ou apenas deseja analisar os scripts sem adicioná-los ao DOM, ela também lida com erros de exceção. Usei esse código na biblioteca php4sack e é útil fora da biblioteca.
fonte
Se você estiver injetando algo que precisa da tag de script, poderá obter um erro de sintaxe não detectado e dizer token ilegal . Para evitar isso, certifique-se de escapar das barras nas tags de fechamento do script. ie;
O mesmo vale para qualquer tag de fechamento, como uma tag de formulário.
fonte
Eu tinha uma postagem semelhante aqui, addEventListener load on ajax load SEM jquery
Como resolvi isso, insirai chamadas para funções dentro da minha função stateChange. A página que eu configurei tinha 3 botões que carregariam 3 páginas diferentes na contentArea. Como eu precisava saber qual botão estava sendo pressionado para carregar a página 1, 2 ou 3, poderia facilmente usar as instruções if / else para determinar qual página está sendo carregada e, em seguida, qual função executar. O que eu estava tentando fazer era registrar diferentes ouvintes de botão que só funcionariam quando a página específica fosse carregada por causa de IDs de elemento.
tão...
if (page1 está sendo carregado, pageload = 1) execute a função registerListeners1
então o mesmo para a página 2 ou 3.
fonte
Isso funcionou para mim chamando eval em cada conteúdo de script de ajax .done:
fonte
Minha conclusão é que o HTML não permite tags SCRIPT NESTED. Se você estiver usando javascript para injetar código HTML que inclua tags de script dentro, não vai funcionar porque o javascript vai em uma tag de script também. Você pode testá-lo com o próximo código e verá que não vai funcionar. O caso de uso é que você está chamando um serviço com AJAX ou similar, está obtendo HTML e deseja injetá-lo no HTML DOM diretamente. Se o código HTML injetado tiver tags SCRIPT dentro, não vai funcionar.
fonte
Outra coisa a fazer é carregar a página com um script como:
Isso carregará a página, executará o script e removerá o manipulador de eventos quando a função for executada. Isso não será executado imediatamente após um carregamento de ajax, mas se você estiver esperando que o usuário insira o elemento div, funcionará perfeitamente.
PS. Requer Jquery
fonte