Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Возврат двух типов данных для одного запроса (https://javascript.ru/forum/jquery/38091-vozvrat-dvukh-tipov-dannykh-dlya-odnogo-zaprosa.html)

hitenok 18.05.2013 22:39

Возврат двух типов данных для одного запроса
 
Добрый день, подскажите, пожалуйста.
Есть аякс запрос который должен вернуть html код и javascript.
Сейчас возвращаю html, а в нем пишу <script>...</script>.
Писать каждый раз в html <script>...</script> не очень удобно, а типы данных для возврата могут быть либо html либо script, есть способ вернуть отдельно html, а отдельно script в рамках одного запроса?

Deff 18.05.2013 22:42

hitenok,
Приведите минимальный код текущего возврата

hitenok 18.05.2013 22:59

$("#test").live("click", function(){
$.ajax({
type: "POST",
url: "/scripts/ajax/test.ajax.php",
data: "",
dataType: "html",
success: function(html){
$("#test").html(html);
}
});
return false;
});

Возвращает:
<p>Действие совершено.</p>
<script type="text/javascript">
$(document).ready(function(){
$("#id").slideUp(200);
});
});
</script>

Deff 18.05.2013 23:02

hitenok,
И Вам нужно раздельно получить контенты ?

Или что-то другое ?
В принципе - если есть признаки различия контента
Т.е к примеру
в HTML лишь одна строка, далее идет скрипт... ну и тд...
Можно к примеру поставить длинный разделитель
<p>
Действие совершено.
==***********1234567890*************==
 $(document).ready(function(){
 $("#id").slideUp(200);
 });
 return false;
 });
</p>

И распарсить регуляркой

hitenok 18.05.2013 23:04

Мне желательно получить тот же результат без передачи <script>.
А только передать
<p>Действие совершено.</p>
и
$("#id").slideUp(200);

hitenok 18.05.2013 23:06

Другими словами я пытаюсь понять можно ли объединить в одном запросе типы данных html и script.
Т.е. вопрос скорее оптимизации процесса, чем его создания.

Deff 18.05.2013 23:14

Цитата:

Сообщение от hitenok
Другими словами я пытаюсь понять можно ли объединить в одном запросе типы данных html и script.

Можно, при наличии или добавке признака разделения
ранее оно разделялось тегами, можно разделить искуственным разделителем

Ксать контенты легко и сейчас разделяются
$("#test").live("click", function(){
 $.ajax({
 type: "POST",
 url: "/scripts/ajax/test.ajax.php",
 data: "",
 dataType: "html",
 success: function(html){

var scriptCnt = $(html).find('script')[0].text;
$(html).find('script').remove();
alert(scriptCnt +'\n'+$(html).html())

 }
 });
 return false;
 });

hitenok 18.05.2013 23:16

Я видимо не правильно все-таки изложил суть вопроса...
Если возвращать данные типом html, то ответ будет строка html кода которая может содержать и javascript код.
Можно так же вернуть тип script, то ответ будет воспринят заранее как javascript код и выполниться и html код там будет ошибочным.
А можно ли объединить два способа в один запрос?

Deff 18.05.2013 23:21

hitenok,
Я не понимаю задачи - ибо как то летели два кракодила - один зеленый - другой на сервер

А зачем ?
Не устраивает тег скрипт ? - запрашивайте просто текстовый файл

hitenok 18.05.2013 23:24

Цитата:

Сообщение от Deff (Сообщение 251388)
hitenok,
Не устраивает тег скрипт ?

Не то чтобы не устраивает, пытаюсь узнать оптимально ли поступаю, вот и все.

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

Deff 18.05.2013 23:27

hitenok,
Зачем делать обертку - если можно запросить контент скрипта ?
А для сокращения запросов - естественно обертка - так как теги нужны для парса контента и браузером и Вами - если нун разделить

hitenok 18.05.2013 23:41

Данный результат можно получить более оптимальным способом или нет? Это все, что я хочу узнать.

$("#test").live("click", function(){
$.ajax({
type: "POST",
url: "/scripts/ajax/test.ajax.php",
data: "",
dataType: "html",
success: function(html){
$("#test").html(html);
}
});
return false;
});

Возвращает:
<p>Действие совершено.</p>
<script type="text/javascript">
$(document).ready(function(){
$("#id").slideUp(200);
});
});
</script>

simple 18.05.2013 23:41

видимо hitenok хочет что то вроде этого...

response = { html : str html, 
script : str script
}

hitenok 18.05.2013 23:43

simple,
совершенно верно.
Это пример или так реально можно сделать?

Deff 18.05.2013 23:45

simple,
код json обычно длиннее, хотя мож более удобен для парсинга
Вдобавок требует либо дополнительного файла хранения или скрипта перепарса на серве (или и того и другого

hitenok 18.05.2013 23:54

Я так понял, что можно, раз вы смогли это обсудить? Только не понял как.

Deff 19.05.2013 00:07

hitenok,
http://learn.javascript.ru/json
http://learn.javascript.ru/ajax-formats

hitenok 19.05.2013 00:15

Да, я знаю про json, но не настолько хорошо, чтобы понять, как можно его применить в данном случае. Можете привести пример хотя бы в простой форме?


Часовой пояс GMT +3, время: 03:50.