2013-07-16 2 views
0

Как извлечь блок кода Javascript из ответа ajax с помощью jquery? рядом других тегов (в данном случае сОн теге) не преобразование приложений или Eval Javascript кода,Как извлечь блок кода Javascript из ответа ajax с jquery?

в get_js.html

<script> 
    $(function(){ 
     $.get('src.php',function(Source) { 
     // In Here I want to get Javscript Code Block from string(Source) 
     // Only javascript code block, not other tags 
     var Code = GET_SCRIPT(Source); 
     $('#code_block').val(Code); 
    }); 
</script> 
<textarea id="code_block"> 
</textarea> 

в src.php

echo '<script>alert("this is script code, which is not to be excuted")</script><div>Blah..Blah..</div>'; 
+0

в вашем 'php' вам не следует использовать одинарные кавычки в одинарных кавычках. Попробуйте удвоить. 'echo '

Blah..Blah..
';' – Brian

+0

@ A.S.Roma thx. починил это. – soredive

+0

Это зависит от того, иногда заголовок и теги скрипта будут удалены по запросу с помощью ajax. Консоль журнала Источник, чтобы увидеть, что тег сценария есть, а затем просто отфильтровать его с помощью методов DOM. – adeneo

ответ

1

Вы можете сделать это, простое разделение строк:

var str = "<script>alert('this is script code, which is not to be excuted')</script><div>Blah"; 
var script = str.substring(str.indexOf('<script>')+8, str.lastIndexOf("</script>")); 
console.log(script); 
alert('this is script code, which is not to be excuted') 

Проблема возникает, когда в вашем ответе имеется несколько сценариев. Но вы можете справиться с этим так же

0

Вы могли бы попробовать что-то вроде этого:

<textarea id="code_block"></textarea> 
<script src="http://code.jquery.com/jquery-1.10.2.min.js"></script> 
<script> 
    $.ajax('src.php').success(function(resp) { 
     var $container = $('<div />'), // container element for freeform response block 
      $script, script; 
     $container.append(resp); // add the response content to the container so you can search it 

     $script = $container.find('script'); // Locate the script block 
     script = $script.html(); // Get the text only 

     $('#code_block').val(script); 
    }); 
</script> 

Я сломался код, чтобы я мог объяснить каждый шаг; это может быть более кратким. Обратите внимание, что это будет работать только для одного блока сценария. Если бы было много, вам нужно было бы сделать цикл, а не просто вызывать $ script.text().

+0

это не работает. потому что jQuery eval (скрипт) работает при jQuery.fn.append. – soredive

+0

В каком браузере вы видели это поведение? Код не должен выполняться, потому что $ container div не привязан к DOM. –

Смежные вопросы