jquery load () strips tags de script – solução alternativa?

Alguém sabe de um trabalho em torno de jquery. Load () retirando as tags de script carregados de conteúdo externo?

Há muita documentação do fato de que isso acontece, mas depois de cerca de 4 horas pesquisando na net eu não consigo encontrar um trabalho por aí?

Estou carregando divs gerados dinamicamente – semelhante a uma página de resultados de pesquisa – e preciso vincular um .click () a um elemento dentro de cada div gerada dinamicamente. Eu tenho um arquivo php que faz o trabalho de geração de html e retorna todo o html como uma string no entanto eu não posso vincular a jquery .click () como as tags de script contendo a function jquery obter retirado.

aqui está o código que carrega o conteúdo externo chamando o arquivo php …

$("#titles_wrap").load("m_scripts/m_php/titles_loader.php", function(){ $..some code }); 

e aqui está o loop do arquivo php que gera os divs (isso funciona bem) …

 $tag1=''; $tag2=''; while($result_array = mysql_fetch_array($result)) { if($i2<=($titles_total)){ $_SESSION['titles_string'] .= '
  • '.($i2+1).'
    current title:
    '.$result_array[1].'
    new title:
    GO
    '.$tag1.' $(".title_send_'.$i2.'").click(function(){$("#title_php_loader").load("m_scripts/m_php/title_sender.php")}) '.$tag2.'
  • '; $i2++; } }

    Desculpe se este segundo bloco de código é um pouco sobre o lado ‘overkill’ – deixe-me saber se um trecho simplificado seria mais útil. Dito isto, você pode ver no dia 8 da última linha do código php a function jquery que deve ser escrita em cada div com um seletor dinamicamente atribuído.

    Claro, pode ser que haja outros erros no código, mas eu não vou conseguir testá-lo até conseguir que o .load () pare de lixá-lo!

    Se alguém encontrou uma solução para isso – ou até mesmo uma solução de graça limitada – shiny!

    Desde já, obrigado,

    Felicidades,

    Scott

    EDIT – EDITAR – EDITAR – EDITAR – EDITAR – EDITAR – EDITAR – EDITAR

    @TJ Crowder @Frug

    Obrigado pela ajuda!

    Acabei de dar uma boa olhada nas páginas envolvidas na sua demonstração e, sim, vejo que você está trabalhando. Parece incrível porque eles estão lá – aquelas tags de script e há Tantas pessoas lá fora que não conseguem fazer isso funcionar – infelizmente eu sou uma delas!

    As únicas diferenças que vejo entre sua demonstração e minha situação de código foram

    1) nenhuma declaração de tipo na tag de script de abertura,

    2) você está carregando uma página com tags de script como parte do DOM, enquanto eu estava carregando a saída da string php (eu realmente não acho que isso importe, eh? No momento em que atinge o cliente tudo vem para o mesma coisa, não?

    3), sua chamada .load estava buscando uma página inteira, enquanto a minha estava retornando apenas elementos. Desde então mudei a string de saída para include all, e tags mas grrrrrr … Ainda não consigo colocar tags de script para aparecer no DOM.

    Alguma sugestão? Há cargas que eu não sei sobre isso poderia ser qualquer coisa! obrigado S

    O load jQuery não remove tags de script ( exemplo ) e não há tags de script no conteúdo que você está retornando do seu script PHP. Existe algum JavaScript, mas ele não está corretamente incorporado nas tags de script e, portanto, não está sendo reconhecido pelo navegador.

    Se você quer o JavaScript neste:

     ... '.$tag1.' $(".title_send_'.$i2.'").click(function(){$("#title_php_loader").load("m_scripts/m_php/title_sender.php")}) '.$tag2.' ... 

    para ser reconhecido como JavaScript, coloque-o em uma tag de script .

     ... '.$tag1.'  '.$tag2.' ... 

    … ou melhor ainda, use uma única tag de script no final do conteúdo para ligar as coisas ou o retorno de chamada na function load .


    Atualização : Re sua edição:

    1) nenhuma declaração de tipo na tag de script de abertura,

    Não importa, veja este exemplo atualizado . O navegador interpreta a tag de script acordo com as mesmas regras que sempre se aplicam.

    2) você está carregando uma página com tags de script como parte do DOM, enquanto eu estava carregando a saída da string php (eu realmente não acho que isso importe, eh? No momento em que atinge o cliente tudo vem para o mesma coisa, não?

    Certo, tudo se resume à mesma coisa quando chega ao navegador.

    3), sua chamada .load estava buscando uma página inteira, enquanto a minha estava retornando apenas elementos. Desde então mudei a string de saída para include all, e tags mas grrrrrr … Ainda não consigo colocar tags de script para aparecer no DOM.

    Meu exemplo é apenas carregar um snippet, não uma página inteira.

    Eu não sei porque o seu não está funcionando. Gostaria de saber se isso está relacionado a vários elementos de script sendo exibidos em um loop ou se você está conectando um manipulador de click , mas não é um desses .

    Não há nada para isso, mas pegue o seu exemplo que não funciona e descasque as camadas pouco a pouco até encontrar a peça que, ao removê-lo, permite que ele comece a funcionar. Fundamentalmente, mais uma vez, não é que usar load faz com que os scripts não funcionem (independentemente de quantas pessoas você acha que acha que é o caso; é um mundo grande, há muitas pessoas que pensam em quase tudo). Você precisa deixar de lado a idéia de que isso está relacionado à function load do jQuery, fazendo qualquer coisa com os scripts; provavelmente não é.

    A chave para depurar esse tipo de coisa é simplificar, simplificar e simplificar . Verifique se o HTML que está sendo retornado pelo servidor para as chamadas do ajax tem a aparência que você acha que faz (sem citações estranhas ou algo assim). Tente fazer isso com páginas estáticas. Etc.

    Atualize agora, que você pode encontrar no site de documentação do jQuery:

    http://api.jquery.com/load/

    Ele tira tags apenas se você chamar load com um seletor com sufixo específico.

    Execução de Script

    Ao chamar .load () usando uma URL sem uma expressão de seletor com sufixo, o conteúdo é passado para .html () antes dos scripts serem removidos. Isso executa os blocos de script antes de serem descartados. Se .load () é chamado com uma expressão de seletor anexada à URL, no entanto, os scripts são removidos antes do DOM sendo atualizado e, portanto, não são executados. Um exemplo de ambos os casos pode ser visto abaixo:

    Aqui, qualquer JavaScript carregado em #a como parte do documento será executado com sucesso. 1

     $('#a').load('article.html'); 

    No entanto, no caso a seguir, os blocos de script no documento que está sendo carregado no #b são removidos e não executados: 1

     $('#b').load('article.html #target'); 

    Esse segmento é um pouco mais antigo agora, mas encontrei uma solução para o problema $.load + selector + / recurso que gostaria de compartilhar. Talvez seja útil para alguém. Em vez de $.load , eu uso isso:

     $.ajax({ url: '/some/url', success: function(html) { var content = $('
    ').html(html).find('#my-custom-selector'); $('#container-to-place-html-in').html(content); } });

    Felicidades, Alex

    Você pode, por favor, confirmar se está removendo os scripts ou se a binding do evento não está funcionando? No entanto, acho que você pode mudar um pouco a abordagem. Primeiro modifique seu script como

     $("#titles_wrap").load("m_scripts/m_php/titles_loader.php", function(){ $..some code $("[class^='title_send_']").click(function(){$("#title_php_loader").load("m_scripts/m_php/title_sender.php")}); }); 

    Em seguida, remova a parte do script do código php

     while($result_array = mysql_fetch_array($result)) { if($i2<=($titles_total)){ $_SESSION['titles_string'] .= '
  • '.($i2+1).'
    current title:
    '.$result_array[1].'
    new title:
    GO
  • '; $i2++; } }

    Por que você não pode usar a function de retorno de chamada para vincular os events em vez de inlining na sua página do php?

    Pode haver uma maneira de contornar isso, mas eu não o colocaria em primeiro lugar, e é por isso que você não está encontrando outros fazendo isso. Se você colocar binds no retorno de chamada, eles serão anexados quando forem carregados.

    É uma porcaria que eu sei, mas uma coisa que você pode fazer é escrever algo como dentro do html que está sendo carregado depois de você .ajax ou método .load no retorno de chamada fazer uma string replace -> html = html.replace (/ lscript / g, ‘script ‘);

    algo para esse efeito deve puxar a tag como uma tag não excitada.

    espero que ajude 🙂