Slyweb
На разработку сайта! Скидки 50%!

Получение через $.post html-текста с тегом <script>

Вы можете задавать любые вопросы по jQuery.

Получение через $.post html-текста с тегом <script>

Сообщение Alex » 04 июн 2010, 20:00

Добрый день, столкнулся со следующей проблемой:
При попытке получить пост запрос страницы, содержащий тег <script></script> вставляется весь html код за исключением <script></script>

Вместо $.post пробовал $.ajax, также менял значения dataType, ничего не помогает :(

Запрашиваемая страница:
Код: Выделить всё
<div class="ml22 cmp-search">
  <form id="form1619696677" onsubmit="return false;" update="resultpage" method="post" action="/companies/add">
    <fieldset style="display:none;">
      <input type="hidden" name="_method" value="POST" />
    </fieldset>
    <script type="text/javascript">
      //<![CDATA[
        $('#form1619696677').bind('submit', function(){
                $.ajax({
                        async:true,
                        type:'post',
                        complete:function(request, json){$('#resultpage').htmlrequest.responseText); },
                        data:$('#form1619696677').serialize(),
                        url:'/companies/companies'}) })
      //]]>
    </script>
    <div class="clearfix">
      <input class="box1 fl" type="text" id="categories" maxlength="72" name="filters[categories]" value="e.g. Plumbers"
        onFocus="doClear(this)" onBlur="doDefault(this)" />
      <input class="box1 fl" type="text" id="name" maxlength="72" name="filters[name]" value="e.g. Alpha ltd" onFocus="doClear(this)"
        onBlur="doDefault(this)" />
      <input class="box2 fl" type="text" id="address" maxlength="72" name="filters[address]" value="e.g. Altrincham WA14" onFocus="doClear(this)"
        onBlur="doDefault(this)" />
      <input class="go fl" style="" type="image" id="filter-submit" src="/img/cmp_go.png" />
    </div>
  </form>
</div>


пример запроса:
Код: Выделить всё
$.post("/companies/panel", function(data){$("#panel").html(data);});
Alex
 
Сообщения: 4
Зарегистрирован: 04 июн 2010, 19:34

Re: Получение через $.post html-текста с тегом <script>

Сообщение admin » 06 июн 2010, 14:26

Используйте $(document).ready(function(){ .... }); для полной загрузки страницы.

//test.php
Код: Выделить всё
    <div class="ml22 cmp-search">
      <form id="form1619696677" update="resultpage" method="post" action="/companies/add">
        <fieldset style="display:none;">
          <input type="hidden" name="_method" value="POST" />
        </fieldset>
<script type="text/javascript">

$(document).ready(function(){

$('#form1619696677').live('submit', function(){


//пишите правильно запрос
 jQuery.ajax({
   url: "test.xml",
   dataType: "xml",    
   success: function(Response){
   alert($(Response).text())


}
 });

return false
});


});

</script>
        <div class="clearfix">
          <input class="box1 fl" type="text" id="categories" maxlength="72" name="filters[categories]" value="e.g. Plumbers"
            onFocus="doClear(this)" onBlur="doDefault(this)" />
          <input class="box1 fl" type="text" id="name" maxlength="72" name="filters[name]" value="e.g. Alpha ltd" onFocus="doClear(this)"
            onBlur="doDefault(this)" />
          <input class="box2 fl" type="text" id="address" maxlength="72" name="filters[address]" value="e.g. Altrincham WA14" onFocus="doClear(this)"
            onBlur="doDefault(this)" />
          <input type ="submit" class="go fl" style="" id="filter-submit" />
        </div>
      </form>
    </div>



index.php
Код: Выделить всё
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"

   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html lang="en">

<head>

   <title>Test</title>

<script type="text/javascript" src="jquery-1.3.2.min.js"></script>





<script type="text/javascript" src="ui.tabs.js"></script>

<script type="text/javascript" src="color.js"></script>



<link type="text/css" href="http://test.ru/css/commonie7.css" rel="stylesheet" />      

<script type="text/javascript">

$(document).ready(function(){

    $.post("test.php", function(data){$("#panel").html(data);});






});

</script>

<div id = "panel"></div>
<div id = "results"></div>


admin
Администратор
 
Сообщения: 165
Зарегистрирован: 15 авг 2009, 20:02

Re: Получение через $.post html-текста с тегом <script>

Сообщение Alex » 07 июн 2010, 15:32

Спасибо за ответ, к сожалению предложенный Вами вариант не сработал, возможно причина кроется в том что я использую cakephp, либо большое количество подзапросов, поэтому описываю проблему подробнее

Первое что хотелось бы отметить, если в моем запросе добавить Alert, то он показывает что получена вся страница, содержащая тег <script type="text/javascript">т.е. проблема с интерпретацией и вставкой

Привожу полный код скрипта изменяющего id="panel":
Код: Выделить всё
<li><?=$ajax->link(__("News", true), array( 'controller' => 'home', 'action' => 'getpagenews'),
                   array('before' => '$("#pan_left").html("<img src=\"/img/loading_arrows_w.gif\" />");',
                         'complete' => '$("#pan_left").empty(); portlets(); restoreOrder();
                                        $(document).ready(function(){$.post("/companies/panel", function(data){
                                                       $("#panel").html(data);
                                                       alert(data);});
                                        });',
                         'update' => 'resultpage'), null, FALSE);?></li>
Alex
 
Сообщения: 4
Зарегистрирован: 04 июн 2010, 19:34

Re: Получение через $.post html-текста с тегом <script>

Сообщение Alex » 07 июн 2010, 17:10

В настоящий момент решил проблему только с помощью вынесения части скрипта отвечающего за последующую обработку формы в файл .js, который подгружается при первоначальной загрузке главной страницы.

Другие варианты, позволяющие получить страницу со сгенерированным скриптом попыткой не увенчались, пост на этапе загрузки единовременно запускает скрипт содержащийся на странице, но в дальнейшем скрипт уже не работает (live) не помогает.

Если у кого-либо есть идеи как заставить этот скрипт слушать submit, прошу поделиться.
Alex
 
Сообщения: 4
Зарегистрирован: 04 июн 2010, 19:34

Re: Получение через $.post html-текста с тегом <script>

Сообщение admin » 08 июн 2010, 20:26

Другие варианты, позволяющие получить страницу со сгенерированным скриптом попыткой не увенчались, пост на этапе загрузки единовременно запускает скрипт содержащийся на странице, но в дальнейшем скрипт уже не работает (live) не помогает.
- не верно, может быть я что-то не пойму, но что значит единовременно срабатывает, то есть один раз загружает страницу /companies/panel или страницу /companies/companies в моих примерах (они ниже указаны) чтраница test.php может загружаться любое количество раз, а запрос отправляемый из скрипта расположенного на странице test.php, так же будет выполняться сколько угодно.

index.php
Код: Выделить всё
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>Проба</title>

<script type="text/javascript" src="../jsfiles/jquery-1.3.2.min.js"></script>
</head>
<?
class ajax {
function link($jquery){
echo $jquery['complete'];
 }
}
?>
<script type="text/javascript">
<?
$ajax = new ajax();
$ajax->link(array('complete' => '$(document).ready(function(){$.post("test.php", function(data){$("#panel").html(data);alert(data);});});'));
?>
</script>
<div id="panel"></div>


test.php
Код: Выделить всё
<div class="ml22 cmp-search">
          <form id="form1619696677" update="resultpage" method="post" action="/companies/add">
            <fieldset style="display:none;">
              <input type="hidden" name="_method" value="POST" />
            </fieldset>
         
         

<script type="text/javascript">

    $(document).ready(function(){

    $('#form1619696677').live('submit', function(){


    jQuery.ajax({
       url: "otvet.php",
       dataType: "text",   
       success: function(Response){
       alert(Response)


    }
    });

    return false
    });


    });

    </script>
            <div class="clearfix">
              <input class="box1 fl" type="text" id="categories" maxlength="72" name="filters[categories]" value="e.g. Plumbers"
                onFocus="doClear(this)" onBlur="doDefault(this)" />
              <input class="box1 fl" type="text" id="name" maxlength="72" name="filters[name]" value="e.g. Alpha ltd" onFocus="doClear(this)"
                onBlur="doDefault(this)" />
              <input class="box2 fl" type="text" id="address" maxlength="72" name="filters[address]" value="e.g. Altrincham WA14" onFocus="doClear(this)"
                onBlur="doDefault(this)" />
              <input type ="submit" class="go fl" style="" id="filter-submit" />
            </div>
          </form>
        </div>




Код: Выделить всё
<?
header("Content-Type: text/html; character=UTF-8;");
echo "ответ";
?>


Поясните, что именно не работает?

Первое что хотелось бы отметить, если в моем запросе добавить Alert, то он показывает что получена вся страница, содержащая тег <script type="text/javascript">т.е. проблема с интерпретацией и вставкой
- не могу Вас понять, ведь вы загружаете всю страницу, всю и получите. Объясните подробно, что значит проблема со вставкой?
admin
Администратор
 
Сообщения: 165
Зарегистрирован: 15 авг 2009, 20:02

Re: Получение через $.post html-текста с тегом <script>

Сообщение Alex » 21 июн 2010, 15:05

Спасибо за помошь, проблема решена.
Оказалось, что в хелпере для CakePHP была ошибка, после исправления которой все заработало.

Алекс.
Alex
 
Сообщения: 4
Зарегистрирован: 04 июн 2010, 19:34


Вернуться в Вопросы по jQuery

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3

cron